diff --git a/doc/plugins/ticketoutputpdf.rst b/doc/plugins/ticketoutputpdf.rst index ab5e0cce0..e82fe5cc3 100644 --- a/doc/plugins/ticketoutputpdf.rst +++ b/doc/plugins/ticketoutputpdf.rst @@ -17,9 +17,13 @@ Field Type Description id integer Internal layout ID name string Internal layout description default boolean ``true`` if this is the default layout -layout object Layout specification for libpretixprint +layout list Dynamic layout specification. Each list element + corresponds to one dynamic element of the layout. + The current version of the schema in use can be found + `here`_. + Submitting invalid content can lead to application errors. background URL Background PDF file -item_assignments list of objects Products this layout is assigned to +item_assignments list of objects Products this layout is assigned to (currently read-only) ├ sales_channel string Sales channel (defaults to ``web``). └ item integer Item ID ===================================== ========================== ======================================================= @@ -58,7 +62,7 @@ Endpoints "name": "Default layout", "default": true, "layout": {…}, - "background": {}, + "background": null, "item_assignments": [] } ] @@ -96,7 +100,7 @@ Endpoints "name": "Default layout", "default": true, "layout": {…}, - "background": {}, + "background": null, "item_assignments": [] } @@ -147,3 +151,122 @@ Endpoints :statuscode 200: no error :statuscode 401: Authentication failure :statuscode 403: The requested organizer does not exist **or** you have no permission to view it. + +.. http:post:: /api/v1/organizers/(organizer)/events/(event)/ticketlayouts/ + + Creates a new ticket layout + + **Example request**: + + .. sourcecode:: http + + POST /api/v1/organizers/bigevents/events/sampleconf/ticketlayouts/ HTTP/1.1 + Host: pretix.eu + Accept: application/json, text/javascript + Content-Type: application/json + + { + "name": "Default layout", + "default": true, + "layout": […], + "background": null, + "item_assignments": [] + } + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 201 Created + Vary: Accept + Content-Type: application/json + + { + "id": 1, + "name": "Default layout", + "default": true, + "layout": […], + "background": null, + "item_assignments": [] + } + + :param organizer: The ``slug`` field of the organizer of the event to create a layout for + :param event: The ``slug`` field of the event to create a layout for + :statuscode 201: no error + :statuscode 400: The layout could not be created due to invalid submitted data. + :statuscode 401: Authentication failure + :statuscode 403: The requested organizer/event does not exist **or** you have no permission to create this resource. + +.. http:patch:: /api/v1/organizers/(organizer)/events/(event)/ticketlayouts/(id)/ + + Update a layout. You can also use ``PUT`` instead of ``PATCH``. With ``PUT``, you have to provide all fields of + the resource, other fields will be reset to default. With ``PATCH``, you only need to provide the fields that you + want to change. + + **Example request**: + + .. sourcecode:: http + + PATCH /api/v1/organizers/bigevents/events/sampleconf/ticketlayouts/1/ HTTP/1.1 + Host: pretix.eu + Accept: application/json, text/javascript + Content-Type: application/json + Content-Length: 94 + + { + "name": "Default layout" + } + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Vary: Accept + Content-Type: application/json + + { + "id": 1, + "name": "Default layout", + "default": true, + "layout": […], + "background": null, + "item_assignments": [] + } + + :param organizer: The ``slug`` field of the organizer to modify + :param event: The ``slug`` field of the event to modify + :param id: The ``id`` field of the layout to modify + :statuscode 200: no error + :statuscode 400: The layout could not be modified due to invalid submitted data + :statuscode 401: Authentication failure + :statuscode 403: The requested organizer/event does not exist **or** you have no permission to change this resource. + +.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/ticketlayouts/(id)/ + + Delete a layout. + + **Example request**: + + .. sourcecode:: http + + DELETE /api/v1/organizers/bigevents/events/sampleconf/ticketlayouts/1/ HTTP/1.1 + Host: pretix.eu + Accept: application/json, text/javascript + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 204 No Content + Vary: Accept + + :param organizer: The ``slug`` field of the organizer to modify + :param event: The ``slug`` field of the event to modify + :param id: The ``id`` field of the layout to delete + :statuscode 204: no error + :statuscode 401: Authentication failure + :statuscode 403: The requested organizer/event does not exist **or** you have no permission to delete this resource. + + +.. _here: https://github.com/pretix/pretix/blob/master/src/pretix/static/schema/pdf-layout.schema.json diff --git a/src/pretix/base/pdf.py b/src/pretix/base/pdf.py index b156e198f..2a0869c48 100644 --- a/src/pretix/base/pdf.py +++ b/src/pretix/base/pdf.py @@ -35,6 +35,7 @@ import copy import hashlib import itertools +import json import logging import os import re @@ -46,12 +47,15 @@ from collections import OrderedDict from functools import partial from io import BytesIO +import jsonschema from arabic_reshaper import ArabicReshaper from bidi.algorithm import get_display from django.conf import settings from django.contrib.staticfiles import finders +from django.core.exceptions import ValidationError from django.db.models import Max, Min from django.dispatch import receiver +from django.utils.deconstruct import deconstructible from django.utils.formats import date_format from django.utils.functional import SimpleLazyObject from django.utils.html import conditional_escape @@ -740,9 +744,9 @@ class Renderer: if o['content'] == 'other' or o['content'] == 'other_i18n': if o['content'] == 'other_i18n': - text = str(LazyI18nString(o['text_i18n'])) + text = str(LazyI18nString(o.get('text_i18n', {}))) else: - text = o['text'] + text = o.get('text', '') def replace(x): if x.group(1).startswith('itemmeta:'): @@ -975,3 +979,22 @@ class Renderer: output.write(outbuffer) outbuffer.seek(0) return outbuffer + + +@deconstructible +class PdfLayoutValidator: + def __call__(self, value): + if not isinstance(value, dict): + try: + val = json.loads(value) + except ValueError: + raise ValidationError(_('Your layout file is not a valid JSON file.')) + else: + val = value + with open(finders.find('schema/pdf-layout.schema.json'), 'r') as f: + schema = json.loads(f.read()) + try: + jsonschema.validate(val, schema) + except jsonschema.ValidationError as e: + e = str(e).replace('%', '%%') + raise ValidationError(_('Your layout file is not a valid layout. Error message: {}').format(e)) diff --git a/src/pretix/control/templates/pretixcontrol/pdf/index.html b/src/pretix/control/templates/pretixcontrol/pdf/index.html index e8b91a8c6..ead6a07ec 100644 --- a/src/pretix/control/templates/pretixcontrol/pdf/index.html +++ b/src/pretix/control/templates/pretixcontrol/pdf/index.html @@ -458,7 +458,9 @@ + + diff --git a/src/pretix/plugins/ticketoutputpdf/api.py b/src/pretix/plugins/ticketoutputpdf/api.py index 7420e05a0..3f2ddba23 100644 --- a/src/pretix/plugins/ticketoutputpdf/api.py +++ b/src/pretix/plugins/ticketoutputpdf/api.py @@ -19,11 +19,16 @@ # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # +from django.conf import settings +from django.db import transaction from rest_framework import viewsets +from rest_framework.exceptions import ValidationError from pretix.api.serializers.i18n import I18nAwareModelSerializer from pretix.api.serializers.order import CompatibleJSONField +from ...api.serializers.fields import UploadedFileField +from ...base.pdf import PdfLayoutValidator from ...multidomain.utils import static_absolute from .models import TicketLayout, TicketLayoutItem @@ -43,8 +48,13 @@ class NestedItemAssignmentSerializer(I18nAwareModelSerializer): class TicketLayoutSerializer(I18nAwareModelSerializer): - layout = CompatibleJSONField() - item_assignments = NestedItemAssignmentSerializer(many=True) + layout = CompatibleJSONField( + validators=[PdfLayoutValidator()] + ) + item_assignments = NestedItemAssignmentSerializer(many=True, read_only=True) + background = UploadedFileField(required=False, allow_null=True, allowed_types=( + 'application/pdf', + ), max_size=settings.FILE_UPLOAD_MAX_SIZE_IMAGE) class Meta: model = TicketLayout @@ -56,8 +66,17 @@ class TicketLayoutSerializer(I18nAwareModelSerializer): d['background'] = static_absolute(instance.event, "pretixpresale/pdf/ticket_default_a4.pdf") return d + def validate(self, attrs): + if attrs.get('default') and self.context['event'].ticket_layouts.filter(default=True).exists: + raise ValidationError('You cannot have two layouts with default = True') + return attrs -class TicketLayoutViewSet(viewsets.ReadOnlyModelViewSet): + def create(self, validated_data): + validated_data["event"] = self.context["event"] + return super().create(validated_data) + + +class TicketLayoutViewSet(viewsets.ModelViewSet): serializer_class = TicketLayoutSerializer queryset = TicketLayout.objects.none() lookup_field = 'id' @@ -65,6 +84,45 @@ class TicketLayoutViewSet(viewsets.ReadOnlyModelViewSet): def get_queryset(self): return self.request.event.ticket_layouts.all() + def get_serializer_context(self): + return { + **super().get_serializer_context(), + 'event': self.request.event, + } + + @transaction.atomic() + def perform_destroy(self, instance): + instance.log_action( + action='pretix.plugins.ticketoutputpdf.layout.deleted', + user=self.request.user, auth=self.request.auth + ) + super().perform_destroy(instance) + if not self.request.event.ticket_layouts.filter(default=True).exists(): + f = self.request.event.ticket_layouts.first() + if f: + f.default = True + f.save(update_fields=['default']) + + @transaction.atomic() + def perform_create(self, serializer): + super().perform_create(serializer) + serializer.instance.log_action( + action='pretix.plugins.ticketoutputpdf.layout.added', + user=self.request.user, + auth=self.request.auth, + data=self.request.data, + ) + + @transaction.atomic() + def perform_update(self, serializer): + super().perform_update(serializer) + serializer.instance.log_action( + action='pretix.plugins.ticketoutputpdf.layout.changed', + user=self.request.user, + auth=self.request.auth, + data=self.request.data, + ) + class TicketLayoutItemViewSet(viewsets.ReadOnlyModelViewSet): serializer_class = ItemAssignmentSerializer diff --git a/src/pretix/static/ajv/ajv2020.bundle.min.js b/src/pretix/static/ajv/ajv2020.bundle.min.js new file mode 100644 index 000000000..6de7bfc17 --- /dev/null +++ b/src/pretix/static/ajv/ajv2020.bundle.min.js @@ -0,0 +1,7 @@ +!function(e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).ajv2020=e()}(function(){return function a(o,s,n){function i(t,e){if(!s[t]){if(!o[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(c)return c(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}r=s[t]={exports:{}},o[t][0].call(r.exports,function(e){return i(o[t][1][e]||e)},r,r.exports,a,o,s,n)}return s[t].exports}for(var c="function"==typeof require&&require,e=0;e""+e+t,"")}get names(){var e;return null!=(e=this._names)?e:this._names=this._items.reduce((e,t)=>(t instanceof n&&(e[t.str]=(e[t.str]||0)+1),e),{})}}function o(e,...t){const r=[e[0]];let a=0;for(;a"),GTE:new n._Code(">="),LT:new n._Code("<"),LTE:new n._Code("<="),EQ:new n._Code("==="),NEQ:new n._Code("!=="),NOT:new n._Code("!"),OR:new n._Code("||"),AND:new n._Code("&&"),ADD:new n._Code("+")};class o{optimizeNodes(){return this}optimizeNames(e,t){return this}}class s extends o{constructor(e,t,r){super(),this.varKind=e,this.name=t,this.rhs=r}render({es5:e,_n:t}){var e=e?i.varKinds.var:this.varKind,r=void 0===this.rhs?"":" = "+this.rhs;return`${e} ${this.name}${r};`+t}optimizeNames(e,t){if(e[this.name.str])return this.rhs&&(this.rhs=O(this.rhs,e,t)),this}get names(){return this.rhs instanceof n._CodeOrName?this.rhs.names:{}}}class c extends o{constructor(e,t,r){super(),this.lhs=e,this.rhs=t,this.sideEffects=r}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(!(this.lhs instanceof n.Name)||e[this.lhs.str]||this.sideEffects)return this.rhs=O(this.rhs,e,t),this}get names(){return C(this.lhs instanceof n.Name?{}:{...this.lhs.names},this.rhs)}}class l extends c{constructor(e,t,r,a){super(e,r,a),this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class d extends o{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return this.label+":"+e}}class u extends o{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`break${this.label?" "+this.label:""};`+e}}class m extends o{constructor(e){super(),this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class p extends o{constructor(e){super(),this.code=e}render({_n:e}){return this.code+";"+e}optimizeNodes(){return""+this.code?this:void 0}optimizeNames(e,t){return this.code=O(this.code,e,t),this}get names(){return this.code instanceof n._CodeOrName?this.code.names:{}}}class f extends o{constructor(e=[]){super(),this.nodes=e}render(r){return this.nodes.reduce((e,t)=>e+t.render(r),"")}optimizeNodes(){const e=this["nodes"];let t=e.length;for(;t--;){var r=e[t].optimizeNodes();Array.isArray(r)?e.splice(t,1,...r):r?e[t]=r:e.splice(t,1)}return 0k(e,t.names),{})}}class h extends f{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class y extends f{}class v extends h{}v.kind="else";class g extends h{constructor(e,t){super(t),this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);return this.else&&(t+="else "+this.else.render(e)),t}optimizeNodes(){super.optimizeNodes();var e,t=this.condition;if(!0===t)return this.nodes;let r=this.else;return r&&(e=r.optimizeNodes(),r=this.else=Array.isArray(e)?new v(e):e),r?!1===t?r instanceof g?r:r.nodes:this.nodes.length?this:new g(R(t),r instanceof g?[r]:r.nodes):!1!==t&&this.nodes.length?this:void 0}optimizeNames(e,t){var r;if(this.else=null==(r=this.else)?void 0:r.optimizeNames(e,t),super.optimizeNames(e,t)||this.else)return this.condition=O(this.condition,e,t),this}get names(){var e=super.names;return C(e,this.condition),this.else&&k(e,this.else.names),e}}g.kind="if";class $ extends h{}$.kind="for";class _ extends ${constructor(e){super(),this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(super.optimizeNames(e,t))return this.iteration=O(this.iteration,e,t),this}get names(){return k(super.names,this.iteration.names)}}class b extends ${constructor(e,t,r,a){super(),this.varKind=e,this.name=t,this.from=r,this.to=a}render(e){var{name:t,from:r,to:a}=this;return`for(${e.es5?i.varKinds.var:this.varKind} ${t}=${r}; ${t}<${a}; ${t}++)`+super.render(e)}get names(){var e=C(super.names,this.from);return C(e,this.to)}}class w extends ${constructor(e,t,r,a){super(),this.loop=e,this.varKind=t,this.name=r,this.iterable=a}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(super.optimizeNames(e,t))return this.iterable=O(this.iterable,e,t),this}get names(){return k(super.names,this.iterable.names)}}class E extends h{constructor(e,t,r){super(),this.name=e,this.args=t,this.async=r}render(e){return(this.async?"async ":"")+`function ${this.name}(${this.args})`+super.render(e)}}E.kind="func";class P extends f{render(e){return"return "+super.render(e)}}P.kind="return";class S extends h{render(e){let t="try"+super.render(e);return this.catch&&(t+=this.catch.render(e)),this.finally&&(t+=this.finally.render(e)),t}optimizeNodes(){var e;return super.optimizeNodes(),null!=(e=this.catch)&&e.optimizeNodes(),null!=(e=this.finally)&&e.optimizeNodes(),this}optimizeNames(e,t){var r;return super.optimizeNames(e,t),null!=(r=this.catch)&&r.optimizeNames(e,t),null!=(r=this.finally)&&r.optimizeNames(e,t),this}get names(){var e=super.names;return this.catch&&k(e,this.catch.names),this.finally&&k(e,this.finally.names),e}}class j extends h{constructor(e){super(),this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}j.kind="catch";class N extends h{render(e){return"finally"+super.render(e)}}N.kind="finally";function k(e,t){for(const r in t)e[r]=(e[r]||0)+(t[r]||0);return e}function C(e,t){return t instanceof n._CodeOrName?k(e,t.names):e}function O(e,r,a){return e instanceof n.Name?o(e):(t=e)instanceof n._Code&&t._items.some(e=>e instanceof n.Name&&1===r[e.str]&&void 0!==a[e.str])?new n._Code(e._items.reduce((e,t)=>((t=t instanceof n.Name?o(t):t)instanceof n._Code?e.push(...t._items):e.push(t),e),[])):e;var t;function o(e){var t=a[e.str];return void 0===t||1!==r[e.str]?e:(delete r[e.str],t)}}function R(e){return"boolean"==typeof e||"number"==typeof e||null===e?!e:(0,n._)`!${A(e)}`}r.CodeGen=class{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?"\n":""},this._extScope=e,this._scope=new i.Scope({parent:e}),this._nodes=[new y]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){e=this._extScope.value(e,t);const r=this._values[e.prefix]||(this._values[e.prefix]=new Set);return r.add(e),e}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,r,a){t=this._scope.toName(t);return void 0!==r&&a&&(this._constants[t.str]=r),this._leafNode(new s(e,t,r)),t}const(e,t,r){return this._def(i.varKinds.const,e,t,r)}let(e,t,r){return this._def(i.varKinds.let,e,t,r)}var(e,t,r){return this._def(i.varKinds.var,e,t,r)}assign(e,t,r){return this._leafNode(new c(e,t,r))}add(e,t){return this._leafNode(new l(e,r.operators.ADD,t))}code(e){return"function"==typeof e?e():e!==n.nil&&this._leafNode(new p(e)),this}object(...e){const t=["{"];for(var[r,a]of e)1a(s))}forOf(e,t,r,a=i.varKinds.const){const o=this._scope.toName(e);if(this.opts.es5){const s=t instanceof n.Name?t:this.var("_arr",t);return this.forRange("_i",0,(0,n._)`${s}.length`,e=>{this.var(o,(0,n._)`${s}[${e}]`),r(o)})}return this._for(new w("of",a,o,t),()=>r(o))}forIn(e,t,r,a=this.opts.es5?i.varKinds.var:i.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,(0,n._)`Object.keys(${t})`,r);const o=this._scope.toName(e);return this._for(new w("in",a,o,t),()=>r(o))}endFor(){return this._endBlockNode($)}label(e){return this._leafNode(new d(e))}break(e){return this._leafNode(new u(e))}return(e){var t=new P;if(this._blockNode(t),this.code(e),1!==t.nodes.length)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(P)}try(e,t,r){if(!t&&!r)throw new Error('CodeGen: "try" without "catch" and "finally"');const a=new S;return this._blockNode(a),this.code(e),t&&(e=this.name("e"),this._currNode=a.catch=new j(e),t(e)),r&&(this._currNode=a.finally=new N,this.code(r)),this._endBlockNode(j,N)}throw(e){return this._leafNode(new m(e))}block(e,t){return this._blockStarts.push(this._nodes.length),e&&this.code(e).endBlock(t),this}endBlock(e){var t=this._blockStarts.pop();if(void 0===t)throw new Error("CodeGen: not in self-balancing block");var r=this._nodes.length-t;if(r<0||void 0!==e&&r!==e)throw new Error(`CodeGen: wrong number of nodes: ${r} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=n.nil,r,a){return this._blockNode(new E(e,t,r)),a&&this.code(a).endFunc(),this}endFunc(){return this._endBlockNode(E)}optimize(e=1){for(;0e===n.nil?t:t===n.nil?e:(0,n._)`${A(e)} ${r} ${A(t)}`}function A(e){return e instanceof n.Name?e:(0,n._)`(${e})`}r.or=function(...e){return e.reduce(T)}},{"./code":1,"./scope":3}],3:[function(e,t,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.ValueScope=c.ValueScopeName=c.Scope=c.varKinds=c.UsedValueState=void 0;const l=e("./code");class d extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`),this.value=e.value}}var u;(e=u=c.UsedValueState||(c.UsedValueState={}))[e.Started=0]="Started",e[e.Completed=1]="Completed",c.varKinds={const:new l.Name("const"),let:new l.Name("let"),var:new l.Name("var")};class r{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof l.Name?e:this.name(e)}name(e){return new l.Name(this._newName(e))}_newName(e){const t=this._names[e]||this._nameGroup(e);return""+e+t.index++}_nameGroup(e){var t;if(null!=(t=null==(t=this._parent)?void 0:t._prefixes)&&t.has(e)||this._prefixes&&!this._prefixes.has(e))throw new Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}c.Scope=r;class a extends l.Name{constructor(e,t){super(t),this.prefix=e}setValue(e,{property:t,itemIndex:r}){this.value=e,this.scopePath=(0,l._)`.${new l.Name(t)}[${r}]`}}c.ValueScopeName=a;const o=(0,l._)`\n`;c.ValueScope=class extends r{constructor(e){super(e),this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?o:l.nil}}get(){return this._scope}name(e){return new a(e,this._newName(e))}value(e,t){if(void 0===t.ref)throw new Error("CodeGen: ref must be passed in value");const r=this.toName(e);var e=r["prefix"],a=null!=(a=t.key)?a:t.ref;let o=this._values[e];if(o){var s=o.get(a);if(s)return s}else o=this._values[e]=new Map;o.set(a,r);const n=this._scope[e]||(this._scope[e]=[]);s=n.length;return n[s]=t.ref,r.setValue(t,{property:e,itemIndex:s}),r}getValue(e,t){const r=this._values[e];if(r)return r.get(t)}scopeRefs(t,e=this._values){return this._reduceValues(e,e=>{if(void 0===e.scopePath)throw new Error(`CodeGen: name "${e}" has no value`);return(0,l._)`${t}${e.scopePath}`})}scopeCode(e=this._values,t,r){return this._reduceValues(e,e=>{if(void 0===e.value)throw new Error(`CodeGen: name "${e}" has no value`);return e.value.code},t,r)}_reduceValues(e,a,t={},o){let s=l.nil;for(const r in e){const n=e[r];if(n){const i=t[r]=t[r]||new Map;n.forEach(t=>{if(!i.has(t)){i.set(t,u.Started);let e=a(t);if(e){var r=this.opts.es5?c.varKinds.var:c.varKinds.const;s=(0,l._)`${s}${r} ${t} = ${e};${this.opts._n}`}else{if(!(e=null==o?void 0:o(t)))throw new d(t);s=(0,l._)`${s}${e}${this.opts._n}`}i.set(t,u.Completed)}})}}return s}}},{"./code":1}],4:[function(e,t,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.extendErrors=c.resetErrorsCount=c.reportExtraError=c.reportError=c.keyword$DataError=c.keywordError=void 0;const f=e("./codegen"),h=e("./util"),y=e("./names");function l(e,t){const r=e.const("err",t);e.if((0,f._)`${y.default.vErrors} === null`,()=>e.assign(y.default.vErrors,(0,f._)`[${r}]`),(0,f._)`${y.default.vErrors}.push(${r})`),e.code((0,f._)`${y.default.errors}++`)}function d(e,t){const{gen:r,validateName:a,schemaEnv:o}=e;o.$async?r.throw((0,f._)`new ${e.ValidationError}(${t})`):(r.assign((0,f._)`${a}.errors`,t),r.return(!1))}c.keywordError={message:({keyword:e})=>(0,f.str)`must pass "${e}" keyword validation`},c.keyword$DataError={message:({keyword:e,schemaType:t})=>t?(0,f.str)`"${e}" keyword must be ${t} ($data)`:(0,f.str)`"${e}" keyword is invalid ($data)`},c.reportError=function(e,t=c.keywordError,r,a){var o=e["it"],{gen:s,compositeRule:n,allErrors:i}=o,e=u(e,t,r);(null!=a?a:n||i)?l(s,e):d(o,(0,f._)`[${e}]`)},c.reportExtraError=function(e,t=c.keywordError,r){var a=e["it"],{gen:o,compositeRule:s,allErrors:n}=a;l(o,u(e,t,r)),s||n||d(a,y.default.vErrors)},c.resetErrorsCount=function(e,t){e.assign(y.default.errors,t),e.if((0,f._)`${y.default.vErrors} !== null`,()=>e.if(t,()=>e.assign((0,f._)`${y.default.vErrors}.length`,t),()=>e.assign(y.default.vErrors,null)))},c.extendErrors=function({gen:t,keyword:r,schemaValue:a,data:o,errsCount:e,it:s}){if(void 0===e)throw new Error("ajv implementation error");const n=t.name("err");t.forRange("i",e,y.default.errors,e=>{t.const(n,(0,f._)`${y.default.vErrors}[${e}]`),t.if((0,f._)`${n}.instancePath === undefined`,()=>t.assign((0,f._)`${n}.instancePath`,(0,f.strConcat)(y.default.instancePath,s.errorPath))),t.assign((0,f._)`${n}.schemaPath`,(0,f.str)`${s.errSchemaPath}/${r}`),s.opts.verbose&&(t.assign((0,f._)`${n}.schema`,a),t.assign((0,f._)`${n}.data`,o))})};const v={keyword:new f.Name("keyword"),schemaPath:new f.Name("schemaPath"),params:new f.Name("params"),propertyName:new f.Name("propertyName"),message:new f.Name("message"),schema:new f.Name("schema"),parentSchema:new f.Name("parentSchema")};function u(e,t,r){var a=e.it["createErrors"];if(!1===a)return(0,f._)`{}`;{var[a,e,t={}]=[e,t,r];const{gen:u,it:m}=a,p=[function({errorPath:e},{instancePath:t}){t=t?(0,f.str)`${e}${(0,h.getErrorPath)(t,h.Type.Str)}`:e;return[y.default.instancePath,(0,f.strConcat)(y.default.instancePath,t)]}(m,t),function({keyword:e,it:{errSchemaPath:t}},{schemaPath:r,parentSchema:a}){let o=a?t:(0,f.str)`${t}/${e}`;r&&(o=(0,f.str)`${o}${(0,h.getErrorPath)(r,h.Type.Str)}`);return[v.schemaPath,o]}(a,t)];var[r,{params:t,message:a},e]=[a,e,p],{keyword:o,data:s,schemaValue:n,it:i}=r,{opts:i,propertyName:c,topSchemaRef:l,schemaPath:d}=i;return e.push([v.keyword,o],[v.params,"function"==typeof t?t(r):t||(0,f._)`{}`]),i.messages&&e.push([v.message,"function"==typeof a?a(r):a]),i.verbose&&e.push([v.schema,n],[v.parentSchema,(0,f._)`${l}${d}`],[y.default.data,s]),c&&e.push([v.propertyName,c]),u.object(...p)}}},{"./codegen":2,"./names":6,"./util":10}],5:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.resolveSchema=r.getCompilingSchema=r.resolveRef=r.compileSchema=r.SchemaEnv=void 0;const p=e("./codegen"),f=e("../runtime/validation_error"),h=e("./names"),y=e("./resolve"),c=e("./util"),v=e("./validate");class l{constructor(e){var t;this.refs={},this.dynamicAnchors={};let r;"object"==typeof e.schema&&(r=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=null!=(t=e.baseId)?t:(0,y.normalizeId)(null===r||void 0===r?void 0:r[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=null===r||void 0===r?void 0:r.$async,this.refs={}}}function i(t){var e=g.call(this,t);if(e)return e;var e=(0,y.getFullPath)(this.opts.uriResolver,t.root.baseId),{es5:r,lines:a}=this.opts.code,o=this.opts["ownProperties"];const s=new p.CodeGen(this.scope,{es5:r,lines:a,ownProperties:o});let n;t.$async&&(n=s.scopeValue("Error",{ref:f.default,code:(0,p._)`require("ajv/dist/runtime/validation_error").default`}));r=s.scopeName("validate"),t.validateName=r,a={gen:s,allErrors:this.opts.allErrors,data:h.default.data,parentData:h.default.parentData,parentDataProperty:h.default.parentDataProperty,dataNames:[h.default.data],dataPathArr:[p.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:s.scopeValue("schema",!0===this.opts.code.source?{ref:t.schema,code:(0,p.stringify)(t.schema)}:{ref:t.schema}),validateName:r,ValidationError:n,schema:t.schema,schemaEnv:t,rootId:e,baseId:t.baseId||e,schemaPath:p.nil,errSchemaPath:t.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,p._)`""`,opts:this.opts,self:this};let i;try{this._compilations.add(t),(0,v.validateFunctionCode)(a),s.optimize(this.opts.code.optimize);var c,l,d=s.toString();i=s.scopeRefs(h.default.scope)+"return "+d,this.opts.code.process&&(i=this.opts.code.process(i,t));const u=new Function(""+h.default.self,""+h.default.scope,i),m=u(this,this.scope.get());return this.scope.value(r,{ref:m}),m.errors=null,m.schema=t.schema,(m.schemaEnv=t).$async&&(m.$async=!0),!0===this.opts.code.source&&(m.source={validateName:r,validateCode:d,scopeValues:s._values}),this.opts.unevaluated&&({props:c,items:l}=a,m.evaluated={props:c instanceof p.Name?void 0:c,items:l instanceof p.Name?void 0:l,dynamicProps:c instanceof p.Name,dynamicItems:l instanceof p.Name},m.source&&(m.source.evaluated=(0,p.stringify)(m.evaluated))),t.validate=m,t}catch(e){throw delete t.validate,delete t.validateName,i&&this.logger.error("Error compiling schema, function code:",i),e}finally{this._compilations.delete(t)}}function g(e){for(const a of this._compilations)if(t=a,r=e,t.schema===r.schema&&t.root===r.root&&t.baseId===r.baseId)return a;var t,r}function d(e,t){var r=this.opts.uriResolver.parse(t),a=(0,y._getFullPath)(this.opts.uriResolver,r);let o=(0,y.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(0r+=t(e)),r===1/0))return 1/0}return r}(e)<=t)};const i=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function c(e){for(const t in e){if(i.has(t))return!0;const r=e[t];if(Array.isArray(r)&&r.some(c))return!0;if("object"==typeof r&&c(r))return!0}return!1}function h(e,t="",r){!1!==r&&(t=y(t));r=e.parse(t);return l(e,r)}function l(e,t){const r=e.serialize(t);return r.split("#")[0]+"#"}r.getFullPath=h,r._getFullPath=l;const d=/#\/?$/;function y(e){return e?e.replace(d,""):""}r.normalizeId=y,r.resolveUrl=function(e,t,r){return r=y(r),e.resolve(t,r)};const v=/^[a-z_][-a-z0-9._]*$/i;r.getSchemaRefs=function(e,t){if("boolean"==typeof e)return{};const{schemaId:c,uriResolver:r}=this.opts,l={"":t=y(e[c]||t)},d=h(r,t,!1),u={},m=new Set;return s(e,{allKeys:!0},(o,e,t,r)=>{if(void 0!==r){const i=d+e;let a=l[r];function s(e){const t=this.opts.uriResolver.resolve;if(e=y(a?t(a,e):e),m.has(e))throw f(e);m.add(e);let r=this.refs[e];return"object"==typeof(r="string"==typeof r?this.refs[r]:r)?p(o,r.schema,e):e!==y(i)&&("#"===e[0]?(p(o,u[e],e),u[e]=o):this.refs[e]=i),e}function n(e){if("string"==typeof e){if(!v.test(e))throw new Error(`invalid anchor "${e}"`);s.call(this,"#"+e)}}"string"==typeof o[c]&&(a=s.call(this,o[c])),n.call(this,o.$anchor),n.call(this,o.$dynamicAnchor),l[e]=a}}),u;function p(e,t,r){if(void 0!==t&&!a(e,t))throw f(r)}function f(e){return new Error(`reference "${e}" resolves to more than one schema`)}}},{"./util":10,"fast-deep-equal":83,"json-schema-traverse":84}],9:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.getRules=r.isJSONType=void 0;const a=new Set(["string","number","integer","boolean","null","object","array"]);r.isJSONType=function(e){return"string"==typeof e&&a.has(e)},r.getRules=function(){var e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}},{}],10:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.checkStrictMode=r.getErrorPath=r.Type=r.useFunc=r.setEvaluated=r.evaluatedPropsToName=r.mergeEvaluated=r.eachItem=r.unescapeJsonPointer=r.escapeJsonPointer=r.escapeFragment=r.unescapeFragment=r.schemaRefOrVal=r.schemaHasRulesButRef=r.schemaHasRules=r.checkUnknownRules=r.alwaysValidSchema=r.toHash=void 0;const c=e("./codegen"),a=e("./codegen/code");function o(e,t=e.schema){var{opts:r,self:a}=e;if(r.strictSchema&&"boolean"!=typeof t){var o=a.RULES.keywords;for(const s in t)o[s]||f(e,`unknown keyword: "${s}"`)}}function s(e,t){if("boolean"==typeof e)return!e;for(const r in e)if(t[r])return!0;return!1}function n(e){return"number"==typeof e?""+e:e.replace(/~/g,"~0").replace(/\//g,"~1")}function i(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function l({mergeNames:o,mergeToName:s,mergeValues:n,resultToName:i}){return(e,t,r,a)=>{t=void 0===r?t:r instanceof c.Name?((t instanceof c.Name?o:s)(e,t,r),r):t instanceof c.Name?(s(e,r,t),t):n(t,r);return a!==c.Name||t instanceof c.Name?t:i(e,t)}}function d(e,t){if(!0===t)return e.var("props",!0);var r=e.var("props",(0,c._)`{}`);return void 0!==t&&u(e,r,t),r}function u(t,r,e){Object.keys(e).forEach(e=>t.assign((0,c._)`${r}${(0,c.getProperty)(e)}`,!0))}r.toHash=function(e){const t={};for(const r of e)t[r]=!0;return t},r.alwaysValidSchema=function(e,t){return"boolean"==typeof t?t:0===Object.keys(t).length||(o(e,t),!s(t,e.self.RULES.all))},r.checkUnknownRules=o,r.schemaHasRules=s,r.schemaHasRulesButRef=function(e,t){if("boolean"==typeof e)return!e;for(const r in e)if("$ref"!==r&&t.all[r])return!0;return!1},r.schemaRefOrVal=function({topSchemaRef:e,schemaPath:t},r,a,o){if(!o){if("number"==typeof r||"boolean"==typeof r)return r;if("string"==typeof r)return(0,c._)`${r}`}return(0,c._)`${e}${t}${(0,c.getProperty)(a)}`},r.unescapeFragment=function(e){return i(decodeURIComponent(e))},r.escapeFragment=function(e){return encodeURIComponent(n(e))},r.escapeJsonPointer=n,r.unescapeJsonPointer=i,r.eachItem=function(e,t){if(Array.isArray(e))for(const r of e)t(r);else t(e)},r.mergeEvaluated={props:l({mergeNames:(e,t,r)=>e.if((0,c._)`${r} !== true && ${t} !== undefined`,()=>{e.if((0,c._)`${t} === true`,()=>e.assign(r,!0),()=>e.assign(r,(0,c._)`${r} || {}`).code((0,c._)`Object.assign(${r}, ${t})`))}),mergeToName:(e,t,r)=>e.if((0,c._)`${r} !== true`,()=>{!0===t?e.assign(r,!0):(e.assign(r,(0,c._)`${r} || {}`),u(e,r,t))}),mergeValues:(e,t)=>!0===e||{...e,...t},resultToName:d}),items:l({mergeNames:(e,t,r)=>e.if((0,c._)`${r} !== true && ${t} !== undefined`,()=>e.assign(r,(0,c._)`${t} === true ? true : ${r} > ${t} ? ${r} : ${t}`)),mergeToName:(e,t,r)=>e.if((0,c._)`${r} !== true`,()=>e.assign(r,!0===t||(0,c._)`${r} > ${t} ? ${r} : ${t}`)),mergeValues:(e,t)=>!0===e||Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})},r.evaluatedPropsToName=d,r.setEvaluated=u;const m={};var p;function f(e,t,r=e.opts.strictSchema){if(r){if(t="strict mode: "+t,!0===r)throw new Error(t);e.self.logger.warn(t)}}r.useFunc=function(e,t){return e.scopeValue("func",{ref:t,code:m[t.code]||(m[t.code]=new a._Code(t.code))})},(e=p=r.Type||(r.Type={}))[e.Num=0]="Num",e[e.Str=1]="Str",r.getErrorPath=function(e,t,r){return e instanceof c.Name?(t=t===p.Num,r?t?(0,c._)`"[" + ${e} + "]"`:(0,c._)`"['" + ${e} + "']"`:t?(0,c._)`"/" + ${e}`:(0,c._)`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`):r?(0,c.getProperty)(e).toString():"/"+n(e)},r.checkStrictMode=f},{"./codegen":2,"./codegen/code":1}],11:[function(e,t,r){"use strict";function a(t,e){return e.rules.some(e=>o(t,e))}function o(t,e){return void 0!==t[e.keyword]||(null==(e=e.definition.implements)?void 0:e.some(e=>void 0!==t[e]))}Object.defineProperty(r,"__esModule",{value:!0}),r.shouldUseRule=r.shouldUseGroup=r.schemaHasRulesForType=void 0,r.schemaHasRulesForType=function({schema:e,self:t},r){return(t=t.RULES.types[r])&&!0!==t&&a(e,t)},r.shouldUseGroup=a,r.shouldUseRule=o},{}],12:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.boolOrEmptySchema=r.topBoolOrEmptySchema=void 0;const o=e("../errors"),s=e("../codegen"),n=e("../names"),i={message:"boolean schema is false"};function c(e,t){var{gen:r,data:a}=e,r={gen:r,keyword:"false schema",data:a,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,o.reportError)(r,i,void 0,t)}r.topBoolOrEmptySchema=function(e){const{gen:t,schema:r,validateName:a}=e;!1===r?c(e,!1):"object"==typeof r&&!0===r.$async?t.return(n.default.data):(t.assign((0,s._)`${a}.errors`,null),t.return(!0))},r.boolOrEmptySchema=function(e,t){const{gen:r,schema:a}=e;!1===a?(r.var(t,!1),c(e)):r.var(t,!0)}},{"../codegen":2,"../errors":4,"../names":6}],13:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.reportTypeError=r.checkDataTypes=r.checkDataType=r.coerceAndCheckDataType=r.getJSONTypes=r.getSchemaTypes=r.DataType=void 0;const a=e("../rules"),n=e("./applicability"),o=e("../errors"),m=e("../codegen"),i=e("../util");var c;function s(e){const t=Array.isArray(e)?e:e?[e]:[];if(t.every(a.isJSONType))return t;throw new Error("type must be JSONType or JSONType[]: "+t.join(","))}(e=c=r.DataType||(r.DataType={}))[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong",r.getSchemaTypes=function(e){const t=s(e.type);if(t.includes("null")){if(!1===e.nullable)throw new Error("type: null contradicts nullable: false")}else{if(!t.length&&void 0!==e.nullable)throw new Error('"nullable" cannot be used without "type"');!0===e.nullable&&t.push("null")}return t},r.getJSONTypes=s,r.coerceAndCheckDataType=function(l,d){const{gen:e,data:t,opts:r}=l,u=(s=d,(a=r.coerceTypes)?s.filter(e=>p.has(e)||"array"===a&&"array"===e):[]);var a,o,s=0{if(u.length){var o=l,e=d,t=u;const{gen:s,data:n,opts:r}=o,a=s.let("dataType",(0,m._)`typeof ${n}`),i=s.let("coerced",(0,m._)`undefined`);"array"===r.coerceTypes&&s.if((0,m._)`${a} == 'object' && Array.isArray(${n}) && ${n}.length == 1`,()=>s.assign(n,(0,m._)`${n}[0]`).assign(a,(0,m._)`typeof ${n}`).if(f(e,n,r.strictNumbers),()=>s.assign(i,n))),s.if((0,m._)`${i} !== undefined`);for(const c of t)(p.has(c)||"array"===c&&"array"===r.coerceTypes)&&!function(e){switch(e){case"string":return s.elseIf((0,m._)`${a} == "number" || ${a} == "boolean"`).assign(i,(0,m._)`"" + ${n}`).elseIf((0,m._)`${n} === null`).assign(i,(0,m._)`""`);case"number":return s.elseIf((0,m._)`${a} == "boolean" || ${n} === null + || (${a} == "string" && ${n} && ${n} == +${n})`).assign(i,(0,m._)`+${n}`);case"integer":return s.elseIf((0,m._)`${a} === "boolean" || ${n} === null + || (${a} === "string" && ${n} && ${n} == +${n} && !(${n} % 1))`).assign(i,(0,m._)`+${n}`);case"boolean":return s.elseIf((0,m._)`${n} === "false" || ${n} === 0 || ${n} === null`).assign(i,!1).elseIf((0,m._)`${n} === "true" || ${n} === 1`).assign(i,!0);case"null":return s.elseIf((0,m._)`${n} === "" || ${n} === 0 || ${n} === false`),s.assign(i,null);case"array":s.elseIf((0,m._)`${a} === "string" || ${a} === "number" + || ${a} === "boolean" || ${n} === null`).assign(i,(0,m._)`[${n}]`)}}(c);s.else(),h(o),s.endIf(),s.if((0,m._)`${i} !== undefined`,()=>{var e,t,r,a;s.assign(n,i),[{gen:e,parentData:t,parentDataProperty:r},a]=[o,i],e.if((0,m._)`${t} !== undefined`,()=>e.assign((0,m._)`${t}[${r}]`,a))})}else h(l)})),s};const p=new Set(["string","number","integer","boolean","null"]);function l(e,t,r,a=c.Correct){var o=a===c.Correct?m.operators.EQ:m.operators.NEQ;let s;switch(e){case"null":return(0,m._)`${t} ${o} null`;case"array":s=(0,m._)`Array.isArray(${t})`;break;case"object":s=(0,m._)`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":s=n((0,m._)`!(${t} % 1) && !isNaN(${t})`);break;case"number":s=n();break;default:return(0,m._)`typeof ${t} ${o} ${e}`}return a===c.Correct?s:(0,m.not)(s);function n(e=m.nil){return(0,m.and)((0,m._)`typeof ${t} == "number"`,e,r?(0,m._)`isFinite(${t})`:m.nil)}}function f(e,t,r,a){if(1===e.length)return l(e[0],t,r,a);let o;const s=(0,i.toHash)(e);s.array&&s.object?(e=(0,m._)`typeof ${t} != "object"`,o=s.null?e:(0,m._)`!${t} || ${e}`,delete s.null,delete s.array,delete s.object):o=m.nil,s.number&&delete s.integer;for(const n in s)o=(0,m.and)(o,l(n,t,r,a));return o}r.checkDataType=l,r.checkDataTypes=f;const d={message:({schema:e})=>"must be "+e,params:({schema:e,schemaValue:t})=>"string"==typeof e?(0,m._)`{type: ${e}}`:(0,m._)`{type: ${t}}`};function h(e){e=function(e){var{gen:t,data:r,schema:a}=e,o=(0,i.schemaRefOrVal)(e,a,"type");return{gen:t,keyword:"type",data:r,schema:a.type,schemaCode:o,schemaValue:o,parentSchema:a,params:{},it:e}}(e);(0,o.reportError)(e,d)}r.reportTypeError=h},{"../codegen":2,"../errors":4,"../rules":9,"../util":10,"./applicability":11}],14:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.assignDefaults=void 0;const i=e("../codegen"),c=e("../util");function s(e,t,r){const{gen:a,compositeRule:o,data:s,opts:n}=e;if(void 0!==r){t=(0,i._)`${s}${(0,i.getProperty)(t)}`;if(o)(0,c.checkStrictMode)(e,"default is ignored for: "+t);else{let e=(0,i._)`${t} === undefined`;"empty"===n.useDefaults&&(e=(0,i._)`${e} || ${t} === null || ${t} === ""`),a.if(e,(0,i._)`${t} = ${(0,i.stringify)(r)}`)}}}r.assignDefaults=function(r,e){const{properties:t,items:a}=r.schema;if("object"===e&&t)for(const o in t)s(r,o,t[o].default);else"array"===e&&Array.isArray(a)&&a.forEach((e,t)=>s(r,t,e.default))}},{"../codegen":2,"../util":10}],15:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.getData=r.KeywordCxt=r.validateFunctionCode=void 0;const l=e("./boolSchema"),a=e("./dataType"),E=e("./applicability"),P=e("./dataType"),s=e("./defaults"),o=e("./keyword"),n=e("./subschema"),S=e("../codegen"),j=e("../names"),d=e("../resolve"),N=e("../util"),i=e("../errors");function c({gen:r,validateName:e,schema:a,schemaEnv:t,opts:o},s){o.code.es5?r.func(e,(0,S._)`${j.default.data}, ${j.default.valCxt}`,t.$async,()=>{var e,t;r.code((0,S._)`"use strict"; ${u(a,o)}`),t=o,(e=r).if(j.default.valCxt,()=>{e.var(j.default.instancePath,(0,S._)`${j.default.valCxt}.${j.default.instancePath}`),e.var(j.default.parentData,(0,S._)`${j.default.valCxt}.${j.default.parentData}`),e.var(j.default.parentDataProperty,(0,S._)`${j.default.valCxt}.${j.default.parentDataProperty}`),e.var(j.default.rootData,(0,S._)`${j.default.valCxt}.${j.default.rootData}`),t.dynamicRef&&e.var(j.default.dynamicAnchors,(0,S._)`${j.default.valCxt}.${j.default.dynamicAnchors}`)},()=>{e.var(j.default.instancePath,(0,S._)`""`),e.var(j.default.parentData,(0,S._)`undefined`),e.var(j.default.parentDataProperty,(0,S._)`undefined`),e.var(j.default.rootData,j.default.data),t.dynamicRef&&e.var(j.default.dynamicAnchors,(0,S._)`{}`)}),r.code(s)}):r.func(e,(0,S._)`${j.default.data}, ${e=o,(0,S._)`{${j.default.instancePath}="", ${j.default.parentData}, ${j.default.parentDataProperty}, ${j.default.rootData}=${j.default.data}${e.dynamicRef?(0,S._)`, ${j.default.dynamicAnchors}={}`:S.nil}}={}`}`,t.$async,()=>r.code(u(a,o)).code(s))}function u(e,t){e="object"==typeof e&&e[t.schemaId];return e&&(t.code.source||t.code.process)?(0,S._)`/*# sourceURL=${e} */`:S.nil}function m(e,t){if(f(e)&&($(e),p(e))){var r=e,a=t;const{schema:n,gen:i,opts:c}=r;c.$comment&&n.$comment&&b(r);var o=r,s=o.schema[o.opts.schemaId],o=(s&&(o.baseId=(0,d.resolveUrl)(o.opts.uriResolver,o.baseId,s)),r);if(o.schema.$async&&!o.schemaEnv.$async)throw new Error("async schema in sync schema");s=i.const("_errs",j.default.errors);_(r,s),i.var(a,(0,S._)`${s} === ${j.default.errors}`)}else(0,l.boolOrEmptySchema)(e,t)}function p({schema:e,self:t}){if("boolean"==typeof e)return!e;for(const r in e)if(t.RULES.all[r])return 1}function f(e){return"boolean"!=typeof e.schema}function $(e){(0,N.checkUnknownRules)(e);{const{schema:t,errSchemaPath:r,opts:a,self:o}=e;return void(t.$ref&&a.ignoreKeywordsWithRef&&(0,N.schemaHasRulesButRef)(t,o.RULES)&&o.logger.warn(`$ref: keywords ignored in schema at path "${r}"`))}}function _(e,t){if(e.opts.jtd)return h(e,[],!1,t);var r=(0,a.getSchemaTypes)(e.schema);h(e,r,!(0,a.coerceAndCheckDataType)(e,r),t)}function b({gen:e,schemaEnv:t,schema:r,errSchemaPath:a,opts:o}){r=r.$comment;!0===o.$comment?e.code((0,S._)`${j.default.self}.logger.log(${r})`):"function"==typeof o.$comment&&(o=(0,S.str)`${a}/$comment`,a=e.scopeValue("root",{ref:t.root}),e.code((0,S._)`${j.default.self}.opts.$comment(${r}, ${o}, ${a}.schema)`))}function h(t,r,a,o){const{gen:s,schema:n,data:i,allErrors:c,opts:l,self:e}=t,d=e["RULES"];if(!n.$ref||!l.ignoreKeywordsWithRef&&(0,N.schemaHasRulesButRef)(n,d)){if(!l.jtd){var u=t,m=r;if(!u.schemaEnv.meta&&u.opts.strictTypes){var p,f=u,h=m,y=(h.length&&(f.dataTypes.length?(h.forEach(e=>{C(f.dataTypes,e)||O(f,`type "${e}" not allowed by context "${f.dataTypes.join(",")}"`)}),f.dataTypes=f.dataTypes.filter(e=>C(h,e))):f.dataTypes=h),u.opts.allowUnionTypes||(p=u,1<(m=m).length&&(2!==m.length||!m.includes("null"))&&O(p,"use allowUnionTypes to allow union type keyword")),u),v=u.dataTypes,g=y.self.RULES.all;for(const b in g){var $=g[b];if("object"==typeof $&&(0,E.shouldUseRule)(y.schema,$)){const w=$.definition["type"];w.length&&!w.some(e=>{var t=v;return t.includes(e)||"number"===e&&t.includes("integer")})&&O(y,`missing type "${w.join(",")}" for keyword "${b}"`)}}}}s.block(()=>{for(const e of d.rules)_(e);_(d.post)})}else s.block(()=>R(t,"$ref",d.all.$ref.definition));function _(e){(0,E.shouldUseGroup)(n,e)&&(e.type?(s.if((0,P.checkDataType)(e.type,i,l.strictNumbers)),k(t,e),1===r.length&&r[0]===e.type&&a&&(s.else(),(0,P.reportTypeError)(t)),s.endIf()):k(t,e),c||s.if((0,S._)`${j.default.errors} === ${o||0}`))}}function k(t,r){const{gen:e,schema:a,opts:{useDefaults:o}}=t;o&&(0,s.assignDefaults)(t,r.type),e.block(()=>{for(const e of r.rules)(0,E.shouldUseRule)(a,e)&&R(t,e.keyword,e.definition,r.type)})}function C(e,t){return e.includes(t)||"integer"===t&&e.includes("number")}function O(e,t){t+=` at "${e.schemaEnv.baseId+e.errSchemaPath}" (strictTypes)`,(0,N.checkStrictMode)(e,t,e.opts.strictTypes)}r.validateFunctionCode=function(e){if(f(e)&&($(e),p(e))){var h=e;const{schema:y,opts:v,gen:g}=h;c(h,()=>{v.$comment&&y.$comment&&b(h);var e=h,{schema:t,opts:r}=e;if(void 0!==t.default&&r.useDefaults&&r.strictSchema&&(0,N.checkStrictMode)(e,"default is ignored in the schema root"),g.let(j.default.vErrors,null),g.let(j.default.errors,0),v.unevaluated){var a=h;const{gen:c,validateName:l}=a;a.evaluated=c.const("evaluated",(0,S._)`${l}.evaluated`),c.if((0,S._)`${a.evaluated}.dynamicProps`,()=>c.assign((0,S._)`${a.evaluated}.props`,(0,S._)`undefined`)),c.if((0,S._)`${a.evaluated}.dynamicItems`,()=>c.assign((0,S._)`${a.evaluated}.items`,(0,S._)`undefined`))}_(h);{const{gen:d,schemaEnv:u,validateName:m,ValidationError:p,opts:f}=t=h;if(u.$async)d.if((0,S._)`${j.default.errors} === 0`,()=>d.return(j.default.data),()=>d.throw((0,S._)`new ${p}(${j.default.vErrors})`));else{d.assign((0,S._)`${m}.errors`,j.default.vErrors);if(f.unevaluated){var[{gen:o,evaluated:s,props:n,items:i}]=[t];n instanceof S.Name&&o.assign((0,S._)`${s}.props`,n);i instanceof S.Name&&o.assign((0,S._)`${s}.items`,i)}d.return((0,S._)`${j.default.errors} === 0`)}return}})}else c(e,()=>(0,l.topBoolOrEmptySchema)(e))};class y{constructor(e,t,r){if((0,o.validateKeywordUsage)(e,t,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,N.schemaRefOrVal)(e,this.schema,r,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",w(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,o.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw new Error(r+" value must be "+JSON.stringify(t.schemaType));("code"in t?t.trackErrors:!1!==t.errors)&&(this.errsCount=e.gen.const("_errs",j.default.errors))}result(e,t,r){this.failResult((0,S.not)(e),t,r)}failResult(e,t,r){this.gen.if(e),r?r():this.error(),t?(this.gen.else(),t(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,t){this.failResult((0,S.not)(e),void 0,t)}fail(e){if(void 0===e)return this.error(),void(this.allErrors||this.gen.if(!1));this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);var t=this["schemaCode"];this.fail((0,S._)`${t} !== undefined && (${(0,S.or)(this.invalid$data(),e)})`)}error(e,t,r){if(t)return this.setParams(t),this._error(e,r),void this.setParams({});this._error(e,r)}_error(e,t){(e?i.reportExtraError:i.reportError)(this,this.def.error,t)}$dataError(){(0,i.reportError)(this,this.def.$dataError||i.keyword$DataError)}reset(){if(void 0===this.errsCount)throw new Error('add "trackErrors" to keyword definition');(0,i.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,t){t?Object.assign(this.params,e):this.params=e}block$data(e,t,r=S.nil){this.gen.block(()=>{this.check$data(e,r),t()})}check$data(e=S.nil,t=S.nil){if(this.$data){const{gen:r,schemaCode:a,schemaType:o,def:s}=this;r.if((0,S.or)((0,S._)`${a} === undefined`,t)),e!==S.nil&&r.assign(e,!0),(o.length||s.validateSchema)&&(r.elseIf(this.invalid$data()),this.$dataError(),e!==S.nil&&r.assign(e,!1)),r.else()}}invalid$data(){const{gen:t,schemaCode:r,schemaType:a,def:o,it:s}=this;return(0,S.or)(function(){if(a.length){if(!(r instanceof S.Name))throw new Error("ajv implementation error");var e=Array.isArray(a)?a:[a];return(0,S._)`${(0,P.checkDataTypes)(e,r,s.opts.strictNumbers,P.DataType.Wrong)}`}return S.nil}(),function(){{var e;if(o.validateSchema)return e=t.scopeValue("validate$data",{ref:o.validateSchema}),(0,S._)`!${e}(${r})`}return S.nil}())}subschema(e,t){var r=(0,n.getSubschema)(this.it,e),e=((0,n.extendSubschemaData)(r,this.it,e),(0,n.extendSubschemaMode)(r,e),{...this.it,...r,items:void 0,props:void 0});return m(e,t),e}mergeEvaluated(e,t){const{it:r,gen:a}=this;r.opts.unevaluated&&(!0!==r.props&&void 0!==e.props&&(r.props=N.mergeEvaluated.props(a,e.props,r.props,t)),!0!==r.items&&void 0!==e.items&&(r.items=N.mergeEvaluated.items(a,e.items,r.items,t)))}mergeValidEvaluated(e,t){const{it:r,gen:a}=this;if(r.opts.unevaluated&&(!0!==r.props||!0!==r.items))return a.if(t,()=>this.mergeEvaluated(e,S.Name)),!0}}function R(e,t,r,a){e=new y(e,r,t);"code"in r?r.code(e,a):e.$data&&r.validate?(0,o.funcKeywordCode)(e,r):"macro"in r?(0,o.macroKeywordCode)(e,r):(r.compile||r.validate)&&(0,o.funcKeywordCode)(e,r)}r.KeywordCxt=y;const v=/^\/(?:[^~]|~0|~1)*$/,g=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function w(e,{dataLevel:r,dataNames:t,dataPathArr:a}){let o,s;if(""===e)return j.default.rootData;if("/"===e[0]){if(!v.test(e))throw new Error("Invalid JSON-pointer: "+e);o=e,s=j.default.rootData}else{var n=g.exec(e);if(!n)throw new Error("Invalid JSON-pointer: "+e);e=+n[1];if("#"===(o=n[2])){if(r<=e)throw new Error(c("property/index",e));return a[r-e]}if(rt.assign(r,(0,f._)`${a.parentData}[${a.parentDataProperty}]`))}function $(e,t,r){if(void 0===r)throw new Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword","function"==typeof r?{ref:r}:{ref:r,code:(0,f.stringify)(r)})}r.macroKeywordCode=function(e,t){const{gen:r,keyword:a,schema:o,parentSchema:s,it:n}=e;var t=t.macro.call(n.self,o,s,n),i=$(r,a,t),c=(!1!==n.opts.validateSchema&&n.self.validateSchema(t,!0),r.name("valid"));e.subschema({schema:t,schemaPath:f.nil,errSchemaPath:n.errSchemaPath+"/"+a,topSchemaRef:i,compositeRule:!0},c),e.pass(c,()=>e.error(!0))},r.funcKeywordCode=function(o,s){const{gen:n,keyword:e,schema:t,parentSchema:r,$data:a,it:i}=o;var[c,l]=[i.schemaEnv,s];if(l.async&&!c.$async)throw new Error("async keyword in sync schema");l=!a&&s.compile?s.compile.call(i.self,t,r,i):s.validate;const d=$(n,e,l),u=n.let("valid");function m(e=s.async?(0,f._)`await `:f.nil){var t=i.opts.passContext?h.default.this:h.default.self,r=!("compile"in s&&!a||!1===s.schema);n.assign(u,(0,f._)`${e}${(0,y.callValidateCode)(o,d,t,r)}`,s.modifying)}function p(e){var t;n.if((0,f.not)(null!=(t=s.valid)?t:u),e)}o.block$data(u,function(){if(!1===s.errors)m(),s.modifying&&g(o),p(()=>o.error());else{const a=(s.async?function(){const t=n.let("ruleErrs",null);return n.try(()=>m((0,f._)`await `),e=>n.assign(u,!1).if((0,f._)`${e} instanceof ${i.ValidationError}`,()=>n.assign(t,(0,f._)`${e}.errors`),()=>n.throw(e))),t}:function(){var e=(0,f._)`${d}.errors`;return n.assign(e,null),m(f.nil),e})();s.modifying&&g(o),p(()=>{{var e=o,t=a;const r=e["gen"];return void r.if((0,f._)`Array.isArray(${t})`,()=>{r.assign(h.default.vErrors,(0,f._)`${h.default.vErrors} === null ? ${t} : ${h.default.vErrors}.concat(${t})`).assign(h.default.errors,(0,f._)`${h.default.vErrors}.length`),(0,v.extendErrors)(e)},()=>e.error())}})}}),o.ok(null!=(c=s.valid)?c:u)},r.validSchemaType=function(t,e,r=!1){return!e.length||e.some(e=>"array"===e?Array.isArray(t):"object"===e?t&&"object"==typeof t&&!Array.isArray(t):typeof t==e||r&&void 0===t)},r.validateKeywordUsage=function({schema:t,opts:e,self:r,errSchemaPath:a},o,s){if(Array.isArray(o.keyword)?!o.keyword.includes(s):o.keyword!==s)throw new Error("ajv implementation error");const n=o.dependencies;if(null!==n&&void 0!==n&&n.some(e=>!Object.prototype.hasOwnProperty.call(t,e)))throw new Error(`parent schema must have dependencies of ${s}: `+n.join(","));if(o.validateSchema&&!o.validateSchema(t[s])){s=`keyword "${s}" value is invalid at path "${a}": `+r.errorsText(o.validateSchema.errors);if("log"!==e.validateSchema)throw new Error(s);r.logger.error(s)}}},{"../../vocabularies/code":51,"../codegen":2,"../errors":4,"../names":6}],17:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.extendSubschemaMode=r.extendSubschemaData=r.getSubschema=void 0;const m=e("../codegen"),p=e("../util");r.getSubschema=function(e,{keyword:t,schemaProp:r,schema:a,schemaPath:o,errSchemaPath:s,topSchemaRef:n}){if(void 0!==t&&void 0!==a)throw new Error('both "keyword" and "schema" passed, only one allowed');var i;if(void 0!==t)return i=e.schema[t],void 0===r?{schema:i,schemaPath:(0,m._)`${e.schemaPath}${(0,m.getProperty)(t)}`,errSchemaPath:e.errSchemaPath+"/"+t}:{schema:i[r],schemaPath:(0,m._)`${e.schemaPath}${(0,m.getProperty)(t)}${(0,m.getProperty)(r)}`,errSchemaPath:e.errSchemaPath+`/${t}/`+(0,p.escapeFragment)(r)};if(void 0===a)throw new Error('either "keyword" or "schema" must be passed');if(void 0===o||void 0===s||void 0===n)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:a,schemaPath:o,topSchemaRef:n,errSchemaPath:s}},r.extendSubschemaData=function(t,r,{dataProp:e,dataPropType:a,data:o,dataTypes:s,propertyName:n}){if(void 0!==o&&void 0!==e)throw new Error('both "data" and "dataProp" passed, only one allowed');const i=r["gen"];var c,l,d;function u(e){t.data=e,t.dataLevel=r.dataLevel+1,t.dataTypes=[],r.definedProperties=new Set,t.parentData=r.data,t.dataNames=[...r.dataNames,e]}void 0!==e&&({errorPath:c,dataPathArr:l,opts:d}=r,u(i.let("data",(0,m._)`${r.data}${(0,m.getProperty)(e)}`,!0)),t.errorPath=(0,m.str)`${c}${(0,p.getErrorPath)(e,a,d.jsPropertySyntax)}`,t.parentDataProperty=(0,m._)`${e}`,t.dataPathArr=[...l,t.parentDataProperty]),void 0!==o&&(u(o instanceof m.Name?o:i.let("data",o,!0)),void 0!==n&&(t.propertyName=n)),s&&(t.dataTypes=s)},r.extendSubschemaMode=function(e,{jtdDiscriminator:t,jtdMetadata:r,compositeRule:a,createErrors:o,allErrors:s}){void 0!==a&&(e.compositeRule=a),void 0!==o&&(e.createErrors=o),void 0!==s&&(e.allErrors=s),e.jtdDiscriminator=t,e.jtdMetadata=r}},{"../codegen":2,"../util":10}],18:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.CodeGen=r.Name=r.nil=r.stringify=r.str=r._=r.KeywordCxt=void 0;var a=e("./compile/validate"),o=(Object.defineProperty(r,"KeywordCxt",{enumerable:!0,get:function(){return a.KeywordCxt}}),e("./compile/codegen")),s=(Object.defineProperty(r,"_",{enumerable:!0,get:function(){return o._}}),Object.defineProperty(r,"str",{enumerable:!0,get:function(){return o.str}}),Object.defineProperty(r,"stringify",{enumerable:!0,get:function(){return o.stringify}}),Object.defineProperty(r,"nil",{enumerable:!0,get:function(){return o.nil}}),Object.defineProperty(r,"Name",{enumerable:!0,get:function(){return o.Name}}),Object.defineProperty(r,"CodeGen",{enumerable:!0,get:function(){return o.CodeGen}}),e("./runtime/validation_error"));const n=e("./compile/ref_error"),i=e("./compile/rules"),l=e("./compile"),c=e("./compile/codegen"),d=e("./compile/resolve"),u=e("./compile/validate/dataType"),m=e("./compile/util"),p=e("./refs/data.json"),f=e("./runtime/uri"),h=(e,t)=>new RegExp(e,t),y=(h.code="new RegExp",["removeAdditional","useDefaults","coerceTypes"]),v=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),g={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},$={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'};class _{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...(t=e,s=t.strict,r=!0===(r=null==(r=t.code)?void 0:r.optimize)||void 0===r?1:r||0,o=null!=(o=null==(o=t.code)?void 0:o.regExp)?o:h,a=null!=(a=t.uriResolver)?a:f.default,{strictSchema:null==(n=null!=(n=t.strictSchema)?n:s)||n,strictNumbers:null==(n=null!=(n=t.strictNumbers)?n:s)||n,strictTypes:null!=(n=null!=(n=t.strictTypes)?n:s)?n:"log",strictTuples:null!=(n=null!=(n=t.strictTuples)?n:s)?n:"log",strictRequired:null!=(n=null!=(n=t.strictRequired)?n:s)&&n,code:t.code?{...t.code,optimize:r,regExp:o}:{optimize:r,regExp:o},loopRequired:null!=(s=t.loopRequired)?s:200,loopEnum:null!=(n=t.loopEnum)?n:200,meta:null==(r=t.meta)||r,messages:null==(o=t.messages)||o,inlineRefs:null==(s=t.inlineRefs)||s,schemaId:null!=(n=t.schemaId)?n:"$id",addUsedSchema:null==(r=t.addUsedSchema)||r,validateSchema:null==(o=t.validateSchema)||o,validateFormats:null==(s=t.validateFormats)||s,unicodeRegExp:null==(n=t.unicodeRegExp)||n,int32range:null==(r=t.int32range)||r,uriResolver:a})};var t,r,a,{es5:o,lines:s}=this.opts.code,n=(this.scope=new c.ValueScope({scope:{},prefixes:v,es5:o,lines:s}),this.logger=function(e){if(!1===e)return E;if(void 0===e)return console;if(e.log&&e.warn&&e.error)return e;throw new Error("logger must implement log, warn and error methods")}(e.logger),e.validateFormats);e.validateFormats=!1,this.RULES=(0,i.getRules)(),b.call(this,g,e,"NOT SUPPORTED"),b.call(this,$,e,"DEPRECATED","warn"),this._metaOpts=function(){const e={...this.opts};for(const t of y)delete e[t];return e}.call(this),e.formats&&function(){for(const t in this.opts.formats){var e=this.opts.formats[t];e&&this.addFormat(t,e)}}.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&function(e){if(Array.isArray(e))this.addVocabulary(e);else{this.logger.warn("keywords option as map is deprecated, pass array");for(const t in e){const r=e[t];r.keyword||(r.keyword=t),this.addKeyword(r)}}}.call(this,e.keywords),"object"==typeof e.meta&&this.addMetaSchema(e.meta),function(){var e=this.opts.schemas;if(e)if(Array.isArray(e))this.addSchema(e);else for(const t in e)this.addSchema(e[t],t)}.call(this),e.validateFormats=n}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){var{$data:e,meta:t,schemaId:r}=this.opts;let a=p;"id"===r&&((a={...p}).id=a.$id,delete a.$id),t&&e&&this.addMetaSchema(a,a[r],!1)}defaultMeta(){var{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta="object"==typeof e?e[t]||e:void 0}validate(e,t){let r;if("string"==typeof e){if(!(r=this.getSchema(e)))throw new Error(`no schema with key or ref "${e}"`)}else r=this.compile(e);e=r(t);return"$async"in r||(this.errors=r.errors),e}compile(e,t){e=this._addSchema(e,t);return e.validate||this._compileSchemaEnv(e)}compileAsync(e,r){if("function"!=typeof this.opts.loadSchema)throw new Error("options.loadSchema should be a function");const a=this.opts["loadSchema"];return t.call(this,e,r);async function t(e,t){await o.call(this,e.$schema);e=this._addSchema(e,t);return e.validate||s.call(this,e)}async function o(e){e&&!this.getSchema(e)&&await t.call(this,{$ref:e},!0)}async function s(t){try{return this._compileSchemaEnv(t)}catch(e){if(e instanceof n.default)return function({missingSchema:e,missingRef:t}){if(this.refs[e])throw new Error(`AnySchema ${e} is loaded but ${t} cannot be resolved`)}.call(this,e),await async function(e){var t=await async function(e){var t=this._loading[e];if(t)return t;try{return await(this._loading[e]=a(e))}finally{delete this._loading[e]}}.call(this,e);this.refs[e]||await o.call(this,t.$schema);this.refs[e]||this.addSchema(t,e,r)}.call(this,e.missingSchema),s.call(this,t);throw e}}}addSchema(e,t,r,a=this.opts.validateSchema){if(Array.isArray(e)){for(const n of e)this.addSchema(n,void 0,r,a);return this}let o;if("object"==typeof e){var s=this.opts["schemaId"];if(void 0!==(o=e[s])&&"string"!=typeof o)throw new Error(`schema ${s} must be string`)}return t=(0,d.normalizeId)(t||o),this._checkUnique(t),this.schemas[t]=this._addSchema(e,r,t,a,!0),this}addMetaSchema(e,t,r=this.opts.validateSchema){return this.addSchema(e,t,!0,r),this}validateSchema(e,t){if("boolean"==typeof e)return!0;let r;if(void 0!==(r=e.$schema)&&"string"!=typeof r)throw new Error("$schema must be a string");if(!(r=r||this.opts.defaultMeta||this.defaultMeta()))return this.logger.warn("meta-schema not available"),!(this.errors=null);e=this.validate(r,e);if(!e&&t){t="schema is invalid: "+this.errorsText();if("log"!==this.opts.validateSchema)throw new Error(t);this.logger.error(t)}return e}getSchema(e){let t;for(;"string"==typeof(t=w.call(this,e));)e=t;if(void 0===t){var r=this.opts["schemaId"],r=new l.SchemaEnv({schema:{},schemaId:r});if(!(t=l.resolveSchema.call(this,r,e)))return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":var t=w.call(this,e);return"object"==typeof t&&this._cache.delete(t.schema),delete this.schemas[e],delete this.refs[e],this;case"object":this._cache.delete(e);t=e[this.opts.schemaId];return t&&(t=(0,d.normalizeId)(t),delete this.schemas[t],delete this.refs[t]),this;default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(const t of e)this.addKeyword(t);return this}addKeyword(e,t){let r;if("string"==typeof e)r=e,"object"==typeof t&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=r);else{if("object"!=typeof e||void 0!==t)throw new Error("invalid addKeywords parameters");if(t=e,r=t.keyword,Array.isArray(r)&&!r.length)throw new Error("addKeywords: keyword must be string or non-empty array")}if(!function(e,t){const r=this["RULES"];if((0,m.eachItem)(e,e=>{if(r.keywords[e])throw new Error(`Keyword ${e} is already defined`);if(!P.test(e))throw new Error(`Keyword ${e} has invalid name`)}),t&&t.$data&&!("code"in t||"validate"in t))throw new Error('$data keyword must have "code" or "validate" function')}.call(this,r,t),!t)return(0,m.eachItem)(r,e=>S.call(this,e)),this;!function(e){let t=e["metaSchema"];void 0!==t&&(e.$data&&this.opts.$data&&(t=N(t)),e.validateSchema=this.compile(t,!0))}.call(this,t);const a={...t,type:(0,u.getJSONTypes)(t.type),schemaType:(0,u.getJSONTypes)(t.schemaType)};return(0,m.eachItem)(r,0===a.type.length?e=>S.call(this,e,a):t=>a.type.forEach(e=>S.call(this,t,a,e))),this}getKeyword(e){e=this.RULES.all[e];return"object"==typeof e?e.definition:!!e}removeKeyword(t){const e=this["RULES"];delete e.keywords[t],delete e.all[t];for(const a of e.rules){var r=a.rules.findIndex(e=>e.keyword===t);0<=r&&a.rules.splice(r,1)}return this}addFormat(e,t){return"string"==typeof t&&(t=new RegExp(t)),this.formats[e]=t,this}errorsText(e=this.errors,{separator:r=", ",dataVar:t="data"}={}){return e&&0!==e.length?e.map(e=>""+t+e.instancePath+" "+e.message).reduce((e,t)=>e+r+t):"No errors"}$dataMetaSchema(t,e){var r=this.RULES.all;t=JSON.parse(JSON.stringify(t));for(const s of e){let e=t;for(const n of s.split("/").slice(1))e=e[n];for(const i in r){var a,o=r[i];"object"==typeof o&&(o=o.definition["$data"],a=e[i],o&&a&&(e[i]=N(a)))}}return t}_removeAllSchemas(e,t){for(const a in e){var r=e[a];t&&!t.test(a)||("string"==typeof r?delete e[a]:r&&!r.meta&&(this._cache.delete(r.schema),delete e[a]))}}_addSchema(e,t,r,a=this.opts.validateSchema,o=this.opts.addUsedSchema){let s;var n=this.opts["schemaId"];if("object"==typeof e)s=e[n];else{if(this.opts.jtd)throw new Error("schema must be object");if("boolean"!=typeof e)throw new Error("schema must be object or boolean")}let i=this._cache.get(e);if(void 0!==i)return i;r=(0,d.normalizeId)(s||r);var c=d.getSchemaRefs.call(this,e,r);return i=new l.SchemaEnv({schema:e,schemaId:n,meta:t,baseId:r,localRefs:c}),this._cache.set(i.schema,i),o&&!r.startsWith("#")&&(r&&this._checkUnique(r),this.refs[r]=i),a&&this.validateSchema(e,!0),i}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw new Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):l.compileSchema.call(this,e),e.validate)return e.validate;throw new Error("ajv implementation error")}_compileMetaSchema(e){var t=this.opts;this.opts=this._metaOpts;try{l.compileSchema.call(this,e)}finally{this.opts=t}}}function b(e,t,r,a="error"){for(const s in e){var o=s;o in t&&this.logger[a](`${r}: option ${s}. `+e[o])}}function w(e){return e=(0,d.normalizeId)(e),this.schemas[e]||this.refs[e]}(r.default=_).ValidationError=s.default,_.MissingRefError=n.default;const E={log(){},warn(){},error(){}};const P=/^[a-z_$][a-z0-9_$:-]*$/i;function S(e,t,r){var a=null==t?void 0:t.post;if(r&&a)throw new Error('keyword with "post" flag cannot have "type"');const o=this["RULES"];let s=a?o.post:o.rules.find(({type:e})=>e===r);s||(s={type:r,rules:[]},o.rules.push(s)),o.keywords[e]=!0,t&&(a={keyword:e,definition:{...t,type:(0,u.getJSONTypes)(t.type),schemaType:(0,u.getJSONTypes)(t.schemaType)}},t.before?function(e,t,r){var a=e.rules.findIndex(e=>e.keyword===r);0<=a?e.rules.splice(a,0,t):(e.rules.push(t),this.logger.warn(`rule ${r} is not defined`))}.call(this,s,a,t.before):s.rules.push(a),o.all[e]=a,null!=(e=t.implements)&&e.forEach(e=>this.addKeyword(e)))}const j={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function N(e){return{anyOf:[e,j]}}},{"./compile":5,"./compile/codegen":2,"./compile/ref_error":7,"./compile/resolve":8,"./compile/rules":9,"./compile/util":10,"./compile/validate":15,"./compile/validate/dataType":13,"./refs/data.json":19,"./runtime/uri":31,"./runtime/validation_error":32}],19:[function(e,t,r){t.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}},{}],20:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("./schema.json"),o=e("./meta/applicator.json"),s=e("./meta/unevaluated.json"),n=e("./meta/content.json"),i=e("./meta/core.json"),c=e("./meta/format-annotation.json"),l=e("./meta/meta-data.json"),d=e("./meta/validation.json"),u=["/properties"];r.default=function(r){return[a,o,s,n,i,e(this,c),l,e(this,d)].forEach(e=>this.addMetaSchema(e,void 0,!1)),this;function e(e,t){return r?e.$dataMetaSchema(t,u):t}}},{"./meta/applicator.json":21,"./meta/content.json":22,"./meta/core.json":23,"./meta/format-annotation.json":24,"./meta/meta-data.json":25,"./meta/unevaluated.json":26,"./meta/validation.json":27,"./schema.json":28}],21:[function(e,t,r){t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/applicator",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/applicator":!0},$dynamicAnchor:"meta",title:"Applicator vocabulary meta-schema",type:["object","boolean"],properties:{prefixItems:{$ref:"#/$defs/schemaArray"},items:{$dynamicRef:"#meta"},contains:{$dynamicRef:"#meta"},additionalProperties:{$dynamicRef:"#meta"},properties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},patternProperties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},propertyNames:{$dynamicRef:"#meta"},if:{$dynamicRef:"#meta"},then:{$dynamicRef:"#meta"},else:{$dynamicRef:"#meta"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$dynamicRef:"#meta"}},$defs:{schemaArray:{type:"array",minItems:1,items:{$dynamicRef:"#meta"}}}}},{}],22:[function(e,t,r){t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/content",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Content vocabulary meta-schema",type:["object","boolean"],properties:{contentEncoding:{type:"string"},contentMediaType:{type:"string"},contentSchema:{$dynamicRef:"#meta"}}}},{}],23:[function(e,t,r){t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/core",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0},$dynamicAnchor:"meta",title:"Core vocabulary meta-schema",type:["object","boolean"],properties:{$id:{$ref:"#/$defs/uriReferenceString",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{$ref:"#/$defs/uriString"},$ref:{$ref:"#/$defs/uriReferenceString"},$anchor:{$ref:"#/$defs/anchorString"},$dynamicRef:{$ref:"#/$defs/uriReferenceString"},$dynamicAnchor:{$ref:"#/$defs/anchorString"},$vocabulary:{type:"object",propertyNames:{$ref:"#/$defs/uriString"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$dynamicRef:"#meta"}}},$defs:{anchorString:{type:"string",pattern:"^[A-Za-z_][-A-Za-z0-9._]*$"},uriString:{type:"string",format:"uri"},uriReferenceString:{type:"string",format:"uri-reference"}}}},{}],24:[function(e,t,r){t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/format-annotation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0},$dynamicAnchor:"meta",title:"Format vocabulary meta-schema for annotation results",type:["object","boolean"],properties:{format:{type:"string"}}}},{}],25:[function(e,t,r){t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/meta-data",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/meta-data":!0},$dynamicAnchor:"meta",title:"Meta-data vocabulary meta-schema",type:["object","boolean"],properties:{title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}}}},{}],26:[function(e,t,r){t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/unevaluated",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0},$dynamicAnchor:"meta",title:"Unevaluated applicator vocabulary meta-schema",type:["object","boolean"],properties:{unevaluatedItems:{$dynamicRef:"#meta"},unevaluatedProperties:{$dynamicRef:"#meta"}}}},{}],27:[function(e,t,r){t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/validation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/validation":!0},$dynamicAnchor:"meta",title:"Validation vocabulary meta-schema",type:["object","boolean"],properties:{type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}}},$defs:{nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}}}},{}],28:[function(e,t,r){t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/schema",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Core and Validation specifications meta-schema",allOf:[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/unevaluated"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format-annotation"},{$ref:"meta/content"}],type:["object","boolean"],$comment:"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.",properties:{definitions:{$comment:'"definitions" has been replaced by "$defs".',type:"object",additionalProperties:{$dynamicRef:"#meta"},deprecated:!0,default:{}},dependencies:{$comment:'"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.',type:"object",additionalProperties:{anyOf:[{$dynamicRef:"#meta"},{$ref:"meta/validation#/$defs/stringArray"}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:'"$recursiveAnchor" has been replaced by "$dynamicAnchor".',$ref:"meta/core#/$defs/anchorString",deprecated:!0},$recursiveRef:{$comment:'"$recursiveRef" has been replaced by "$dynamicRef".',$ref:"meta/core#/$defs/uriReferenceString",deprecated:!0}}}},{}],29:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("fast-deep-equal");a.code='require("ajv/dist/runtime/equal").default',r.default=a},{"fast-deep-equal":83}],30:[function(e,t,r){"use strict";function a(e){var t=e.length;let r=0,a=0,o;for(;a(0,l.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,l._)`{limit: ${e}}`},code(e){var{parentSchema:t,it:r}=e,t=t["items"];Array.isArray(t)?a(e,t):(0,d.checkStrictMode)(r,'"additionalItems" is ignored when "items" is not an array of schemas')}};function a(r,e){const{gen:a,schema:t,data:o,keyword:s,it:n}=r,i=(n.items=!0,a.const("len",(0,l._)`${o}.length`));if(!1===t)r.setParams({len:e.length}),r.pass((0,l._)`${i} <= ${e.length}`);else if("object"==typeof t&&!(0,d.alwaysValidSchema)(n,t)){const c=a.var("valid",(0,l._)`${i} <= ${e.length}`);a.if((0,l.not)(c),()=>{var t=c;a.forRange("i",e.length,i,e=>{r.subschema({keyword:s,dataProp:e,dataPropType:d.Type.Num},t),n.allErrors||a.if((0,l.not)(t),()=>a.break())})}),r.ok(c)}}r.validateAdditionalItems=a,r.default=e},{"../../compile/codegen":2,"../../compile/util":10}],34:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const f=e("../code"),h=e("../../compile/codegen"),y=e("../../compile/names"),v=e("../../compile/util");r.default={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:e})=>(0,h._)`{additionalProperty: ${e.additionalProperty}}`},code(a){const{gen:o,schema:r,parentSchema:s,data:t,errsCount:e,it:n}=a;if(!e)throw new Error("ajv implementation error");const{allErrors:i,opts:c}=n;if(n.props=!0,"all"===c.removeAdditional||!(0,v.alwaysValidSchema)(n,r)){const m=(0,f.allSchemaProperties)(s.properties),p=(0,f.allSchemaProperties)(s.patternProperties);function l(e){o.code((0,h._)`delete ${t}[${e}]`)}function d(e){var t;{if(!("all"===c.removeAdditional||c.removeAdditional&&!1===r))return!1===r?(a.setParams({additionalProperty:e}),a.error(),void(i||o.break())):void("object"!=typeof r||(0,v.alwaysValidSchema)(n,r)||(t=o.name("valid"),"failing"===c.removeAdditional?(u(e,t,!1),o.if((0,h.not)(t),()=>{a.reset(),l(e)})):(u(e,t),i||o.if((0,h.not)(t),()=>o.break()))));l(e)}}function u(e,t,r){e={keyword:"additionalProperties",dataProp:e,dataPropType:v.Type.Str};!1===r&&Object.assign(e,{compositeRule:!0,createErrors:!1,allErrors:!1}),a.subschema(e,t)}o.forIn("key",t,e=>{m.length||p.length?o.if(function(t){let e;{var r;e=8(0,h._)`${t} === ${e}`)):h.nil}p.length&&(e=(0,h.or)(e,...p.map(e=>(0,h._)`${(0,f.usePattern)(a,e)}.test(${t})`)));return(0,h.not)(e)}(e),()=>d(e)):d(e)}),a.ok((0,h._)`${e} === ${y.default.errors}`)}}}},{"../../compile/codegen":2,"../../compile/names":6,"../../compile/util":10,"../code":51}],35:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const s=e("../../compile/util");r.default={keyword:"allOf",schemaType:"array",code(r){const{gen:e,schema:t,it:a}=r;if(!Array.isArray(t))throw new Error("ajv implementation error");const o=e.name("valid");t.forEach((e,t)=>{(0,s.alwaysValidSchema)(a,e)||(e=r.subschema({keyword:"allOf",schemaProp:t},o),r.ok(o),r.mergeEvaluated(e))})}}},{"../../compile/util":10}],36:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});e={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:e("../code").validateUnion,error:{message:"must match a schema in anyOf"}};r.default=e},{"../code":51}],37:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const f=e("../../compile/codegen"),h=e("../../compile/util");r.default={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:e,max:t}})=>void 0===t?(0,f.str)`must contain at least ${e} valid item(s)`:(0,f.str)`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>void 0===t?(0,f._)`{minContains: ${e}}`:(0,f._)`{minContains: ${e}, maxContains: ${t}}`},code(a){const{gen:o,schema:e,parentSchema:t,data:r,it:s}=a;let n,i;var{minContains:c,maxContains:l}=t;s.opts.next?(n=void 0===c?1:c,i=l):n=1;const d=o.const("len",(0,f._)`${r}.length`);if(a.setParams({min:n,max:i}),void 0===i&&0===n)(0,h.checkStrictMode)(s,'"minContains" == 0 without "maxContains": "contains" keyword ignored');else{if(void 0!==i&&n>i)return(0,h.checkStrictMode)(s,'"minContains" > "maxContains" is always invalid'),void a.fail();if((0,h.alwaysValidSchema)(s,e)){let e=(0,f._)`${d} >= ${n}`;return void 0!==i&&(e=(0,f._)`${e} && ${d} <= ${i}`),void a.pass(e)}s.items=!0;const p=o.name("valid");function u(){const e=o.name("_valid"),t=o.let("count",0);m(e,()=>o.if(e,()=>{var e=t;o.code((0,f._)`${e}++`),void 0===i?o.if((0,f._)`${e} >= ${n}`,()=>o.assign(p,!0).break()):(o.if((0,f._)`${e} > ${i}`,()=>o.assign(p,!1).break()),1===n?o.assign(p,!0):o.if((0,f._)`${e} >= ${n}`,()=>o.assign(p,!0)))}))}function m(t,r){o.forRange("i",0,d,e=>{a.subschema({keyword:"contains",dataProp:e,dataPropType:h.Type.Num,compositeRule:!0},t),r()})}void 0===i&&1===n?m(p,()=>o.if(p,()=>o.break())):0===n?(o.let(p,!0),void 0!==i&&o.if((0,f._)`${r}.length > 0`,u)):(o.let(p,!1),u()),a.result(p,()=>a.reset())}}}},{"../../compile/codegen":2,"../../compile/util":10}],38:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.validateSchemaDeps=r.validatePropertyDeps=r.error=void 0;const l=e("../../compile/codegen"),c=e("../../compile/util"),d=e("../code");r.error={message:({params:{property:e,depsCount:t,deps:r}})=>{t=1===t?"property":"properties";return(0,l.str)`must have ${t} ${r} when property ${e} is present`},params:({params:{property:e,depsCount:t,deps:r,missingProperty:a}})=>(0,l._)`{property: ${e}, + missingProperty: ${a}, + depsCount: ${t}, + deps: ${r}}`};e={keyword:"dependencies",type:"object",schemaType:"object",error:r.error,code(e){var[t,r]=function({schema:e}){var t={},r={};for(const a in e)if("__proto__"!==a){const o=Array.isArray(e[a])?t:r;o[a]=e[a]}return[t,r]}(e);a(e,t),o(e,r)}};function a(t,e=t.schema){const{gen:r,data:a,it:o}=t;if(0!==Object.keys(e).length){var s,n=r.let("missing");for(const i in e){const c=e[i];0!==c.length&&(s=(0,d.propertyInData)(r,a,i,o.opts.ownProperties),t.setParams({property:i,depsCount:c.length,deps:c.join(", ")}),o.allErrors?r.if(s,()=>{for(const e of c)(0,d.checkReportMissingProp)(t,e)}):(r.if((0,l._)`${s} && (${(0,d.checkMissingProp)(t,c,n)})`),(0,d.reportMissingProp)(t,n),r.else()))}}}function o(t,e=t.schema){const{gen:r,data:a,keyword:o,it:s}=t,n=r.name("valid");for(const i in e)(0,c.alwaysValidSchema)(s,e[i])||(r.if((0,d.propertyInData)(r,a,i,s.opts.ownProperties),()=>{var e=t.subschema({keyword:o,schemaProp:i},n);t.mergeValidEvaluated(e,n)},()=>r.var(n,!0)),t.ok(n))}r.validatePropertyDeps=a,r.validateSchemaDeps=o,r.default=e},{"../../compile/codegen":2,"../../compile/util":10,"../code":51}],39:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("./dependencies");r.default={keyword:"dependentSchemas",type:"object",schemaType:"object",code:e=>(0,a.validateSchemaDeps)(e)}},{"./dependencies":38}],40:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const d=e("../../compile/codegen"),u=e("../../compile/util");function m(e,t){t=e.schema[t];return void 0!==t&&!(0,u.alwaysValidSchema)(e,t)}r.default={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:e})=>(0,d.str)`must match "${e.ifClause}" schema`,params:({params:e})=>(0,d._)`{failingKeyword: ${e.ifClause}}`},code(a){const{gen:o,parentSchema:e,it:t}=a;void 0===e.then&&void 0===e.else&&(0,u.checkStrictMode)(t,'"if" without "then" and "else" is ignored');var r,s=m(t,"then"),n=m(t,"else");if(s||n){const c=o.let("valid",!0),l=o.name("_valid");function i(t,r){return()=>{var e=a.subschema({keyword:t},l);o.assign(c,l),a.mergeValidEvaluated(e,c),r?o.assign(r,(0,d._)`${t}`):a.setParams({ifClause:t})}}r=a.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},l),a.mergeEvaluated(r),a.reset(),s&&n?(r=o.let("ifClause"),a.setParams({ifClause:r}),o.if(l,i("then",r),i("else",r))):s?o.if(l,i("then")):o.if((0,d.not)(l),i("else")),a.pass(c,()=>a.error(!0))}}}},{"../../compile/codegen":2,"../../compile/util":10}],41:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("./additionalItems"),o=e("./prefixItems"),s=e("./items"),n=e("./items2020"),i=e("./contains"),c=e("./dependencies"),l=e("./propertyNames"),d=e("./additionalProperties"),u=e("./properties"),m=e("./patternProperties"),p=e("./not"),f=e("./anyOf"),h=e("./oneOf"),y=e("./allOf"),v=e("./if"),g=e("./thenElse");r.default=function(e=!1){const t=[p.default,f.default,h.default,y.default,v.default,g.default,l.default,d.default,c.default,u.default,m.default];return e?t.push(o.default,n.default):t.push(a.default,s.default),t.push(i.default),t}},{"./additionalItems":33,"./additionalProperties":34,"./allOf":35,"./anyOf":36,"./contains":37,"./dependencies":38,"./if":40,"./items":42,"./items2020":43,"./not":44,"./oneOf":45,"./patternProperties":46,"./prefixItems":47,"./properties":48,"./propertyNames":49,"./thenElse":50}],42:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.validateTuple=void 0;const f=e("../../compile/codegen"),h=e("../../compile/util"),a=e("../code");e={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){const{schema:t,it:r}=e;if(Array.isArray(t))return o(e,"additionalItems",t);r.items=!0,(0,h.alwaysValidSchema)(r,t)||e.ok((0,a.validateArray)(e))}};function o(r,e,t=r.schema){const{gen:a,parentSchema:o,data:s,keyword:n,it:i}=r;var c=o,{opts:l,errSchemaPath:d}=i,u=t.length,c=u===c.minItems&&(u===c.maxItems||!1===c[e]);l.strictTuples&&!c&&(c=`"${n}" is ${u}-tuple, but minItems or maxItems/${e} are not specified or different at path "${d}"`,(0,h.checkStrictMode)(i,c,l.strictTuples)),i.opts.unevaluated&&t.length&&!0!==i.items&&(i.items=h.mergeEvaluated.items(a,t.length,i.items));const m=a.name("valid"),p=a.const("len",(0,f._)`${s}.length`);t.forEach((e,t)=>{(0,h.alwaysValidSchema)(i,e)||(a.if((0,f._)`${p} > ${t}`,()=>r.subschema({keyword:n,schemaProp:t,dataProp:t},m)),r.ok(m))})}r.validateTuple=o,r.default=e},{"../../compile/codegen":2,"../../compile/util":10,"../code":51}],43:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("../../compile/codegen"),s=e("../../compile/util"),n=e("../code"),i=e("./additionalItems");r.default={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:e}})=>(0,a.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,a._)`{limit: ${e}}`},code(e){const{schema:t,parentSchema:r,it:a}=e;var o=r["prefixItems"];a.items=!0,(0,s.alwaysValidSchema)(a,t)||(o?(0,i.validateAdditionalItems)(e,o):e.ok((0,n.validateArray)(e)))}}},{"../../compile/codegen":2,"../../compile/util":10,"../code":51,"./additionalItems":33}],44:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const s=e("../../compile/util");r.default={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){const{gen:t,schema:r,it:a}=e;var o;(0,s.alwaysValidSchema)(a,r)?e.fail():(o=t.name("valid"),e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},o),e.failResult(o,()=>e.reset(),()=>e.error()))},error:{message:"must NOT be valid"}}},{"../../compile/util":10}],45:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const l=e("../../compile/codegen"),d=e("../../compile/util");r.default={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:e})=>(0,l._)`{passingSchemas: ${e.passing}}`},code(a){const{gen:o,schema:e,parentSchema:t,it:s}=a;if(!Array.isArray(e))throw new Error("ajv implementation error");if(!s.opts.discriminator||!t.discriminator){const r=e,n=o.let("valid",!1),i=o.let("passing",null),c=o.name("_valid");a.setParams({passing:i}),o.block(function(){r.forEach((e,t)=>{let r;(0,d.alwaysValidSchema)(s,e)?o.var(c,!0):r=a.subschema({keyword:"oneOf",schemaProp:t,compositeRule:!0},c),0{o.assign(n,!0),o.assign(i,t),r&&a.mergeEvaluated(r,l.Name)})})}),a.result(n,()=>a.reset(),()=>a.error(!0))}}}},{"../../compile/codegen":2,"../../compile/util":10}],46:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const y=e("../code"),v=e("../../compile/codegen"),g=e("../../compile/util"),$=e("../../compile/util");r.default={keyword:"patternProperties",type:"object",schemaType:"object",code(a){const{gen:o,schema:t,data:e,parentSchema:r,it:s}=a;var n=s["opts"];const i=(0,y.allSchemaProperties)(t),c=i.filter(e=>(0,g.alwaysValidSchema)(s,t[e]));if(0!==i.length&&(c.length!==i.length||s.opts.unevaluated&&!0!==s.props)){const u=n.strictSchema&&!n.allowMatchingProperties&&r.properties,m=o.name("valid"),p=(!0===s.props||s.props instanceof v.Name||(s.props=(0,$.evaluatedPropsToName)(o,s.props)),s)["props"];for(const f of i){if(u){l=void 0;var l=f;for(const h in u)new RegExp(l).test(h)&&(0,g.checkStrictMode)(s,`property ${h} matches pattern ${l} (use allowMatchingProperties)`)}s.allErrors?d(f):(o.var(m,!0),d(f),o.if(m))}function d(r){o.forIn("key",e,t=>{o.if((0,v._)`${(0,y.usePattern)(a,r)}.test(${t})`,()=>{var e=c.includes(r);e||a.subschema({keyword:"patternProperties",schemaProp:r,dataProp:t,dataPropType:$.Type.Str},m),s.opts.unevaluated&&!0!==p?o.assign((0,v._)`${p}[${t}]`,!0):e||s.allErrors||o.if((0,v.not)(m),()=>o.break())})})}}}}},{"../../compile/codegen":2,"../../compile/util":10,"../code":51}],47:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("./items");r.default={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:e=>(0,a.validateTuple)(e,"items")}},{"./items":42}],48:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const p=e("../../compile/validate"),f=e("../code"),h=e("../../compile/util"),y=e("./additionalProperties");r.default={keyword:"properties",type:"object",schemaType:"object",code(t){const{gen:e,schema:r,parentSchema:a,data:o,it:s}=t,n=("all"===s.opts.removeAdditional&&void 0===a.additionalProperties&&y.default.code(new p.KeywordCxt(s,y.default,"additionalProperties")),(0,f.allSchemaProperties)(r));for(const d of n)s.definedProperties.add(d);s.opts.unevaluated&&n.length&&!0!==s.props&&(s.props=h.mergeEvaluated.props(e,(0,h.toHash)(n),s.props));var i,c=n.filter(e=>!(0,h.alwaysValidSchema)(s,r[e]));if(0!==c.length){const u=e.name("valid");for(const m of c)i=m,s.opts.useDefaults&&!s.compositeRule&&void 0!==r[i].default?l(m):(e.if((0,f.propertyInData)(e,o,m,s.opts.ownProperties)),l(m),s.allErrors||e.else().var(u,!0),e.endIf()),t.it.definedProperties.add(m),t.ok(u);function l(e){t.subschema({keyword:"properties",schemaProp:e,dataProp:e},u)}}}}},{"../../compile/util":10,"../../compile/validate":15,"../code":51,"./additionalProperties":34}],49:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const n=e("../../compile/codegen"),i=e("../../compile/util");r.default={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:e})=>(0,n._)`{propertyName: ${e.propertyName}}`},code(t){const{gen:r,schema:e,data:a,it:o}=t;if(!(0,i.alwaysValidSchema)(o,e)){const s=r.name("valid");r.forIn("key",a,e=>{t.setParams({propertyName:e}),t.subschema({keyword:"propertyNames",data:e,dataTypes:["string"],propertyName:e,compositeRule:!0},s),r.if((0,n.not)(s),()=>{t.error(!0),o.allErrors||r.break()})}),t.ok(s)}}}},{"../../compile/codegen":2,"../../compile/util":10}],50:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("../../compile/util");r.default={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:r}){void 0===t.if&&(0,a.checkStrictMode)(r,`"${e}" without "if" is ignored`)}}},{"../../compile/util":10}],51:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.validateUnion=r.validateArray=r.usePattern=r.callValidateCode=r.schemaProperties=r.allSchemaProperties=r.noPropertyInData=r.propertyInData=r.isOwnProperty=r.hasPropFunc=r.reportMissingProp=r.checkMissingProp=r.checkReportMissingProp=void 0;const u=e("../compile/codegen"),c=e("../compile/util"),m=e("../compile/names"),n=e("../compile/util");function a(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,u._)`Object.prototype.hasOwnProperty`})}function s(e,t,r){return(0,u._)`${a(e)}.call(${t}, ${r})`}function i(e,t,r,a){var o=(0,u._)`${t}${(0,u.getProperty)(r)} === undefined`;return a?(0,u.or)(o,(0,u.not)(s(e,t,r))):o}function o(e){return e?Object.keys(e).filter(e=>"__proto__"!==e):[]}r.checkReportMissingProp=function(e,t){const{gen:r,data:a,it:o}=e;r.if(i(r,a,t,o.opts.ownProperties),()=>{e.setParams({missingProperty:(0,u._)`${t}`},!0),e.error()})},r.checkMissingProp=function({gen:t,data:r,it:{opts:a}},e,o){return(0,u.or)(...e.map(e=>(0,u.and)(i(t,r,e,a.ownProperties),(0,u._)`${o} = ${e}`)))},r.reportMissingProp=function(e,t){e.setParams({missingProperty:t},!0),e.error()},r.hasPropFunc=a,r.isOwnProperty=s,r.propertyInData=function(e,t,r,a){var o=(0,u._)`${t}${(0,u.getProperty)(r)} !== undefined`;return a?(0,u._)`${o} && ${s(e,t,r)}`:o},r.noPropertyInData=i,r.allSchemaProperties=o,r.schemaProperties=function(t,r){return o(r).filter(e=>!(0,c.alwaysValidSchema)(t,r[e]))},r.callValidateCode=function({schemaCode:e,data:t,it:{gen:r,topSchemaRef:a,schemaPath:o,errorPath:s},it:n},i,c,l){l=l?(0,u._)`${e}, ${t}, ${a}${o}`:t;const d=[[m.default.instancePath,(0,u.strConcat)(m.default.instancePath,s)],[m.default.parentData,n.parentData],[m.default.parentDataProperty,n.parentDataProperty],[m.default.rootData,m.default.rootData]];return n.opts.dynamicRef&&d.push([m.default.dynamicAnchors,m.default.dynamicAnchors]),e=(0,u._)`${l}, ${r.object(...d)}`,c!==u.nil?(0,u._)`${i}.call(${c}, ${e})`:(0,u._)`${i}(${e})`};const l=(0,u._)`new RegExp`;r.usePattern=function({gen:e,it:{opts:t}},r){var a=t.unicodeRegExp?"u":"";const o=t.code["regExp"],s=o(r,a);return e.scopeValue("pattern",{key:s.toString(),ref:s,code:(0,u._)`${"new RegExp"===o.code?l:(0,n.useFunc)(e,o)}(${r}, ${a})`})},r.validateArray=function(r){const{gen:a,data:o,keyword:s,it:e}=r,n=a.name("valid");if(e.allErrors){const i=a.let("valid",!0);return t(()=>a.assign(i,!1)),i}return a.var(n,!0),t(()=>a.break()),n;function t(t){var e=a.const("len",(0,u._)`${o}.length`);a.forRange("i",0,e,e=>{r.subschema({keyword:s,dataProp:e,dataPropType:c.Type.Num},n),a.if((0,u.not)(n),t)})}},r.validateUnion=function(r){const{gen:a,schema:e,keyword:o,it:t}=r;if(!Array.isArray(e))throw new Error("ajv implementation error");var s=e.some(e=>(0,c.alwaysValidSchema)(t,e));if(!s||t.opts.unevaluated){const n=a.let("valid",!1),i=a.name("_valid");a.block(()=>e.forEach((e,t)=>{t=r.subschema({keyword:o,schemaProp:t,compositeRule:!0},i),a.assign(n,(0,u._)`${n} || ${i}`),t=r.mergeValidEvaluated(t,i);t||a.if((0,u.not)(n))})),r.result(n,()=>r.reset(),()=>r.error(!0))}}},{"../compile/codegen":2,"../compile/names":6,"../compile/util":10}],52:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}}},{}],53:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a=e("./id"),e=e("./ref"),a=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",a.default,e.default];r.default=a},{"./id":52,"./ref":54}],54:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.callRef=r.getValidate=void 0;const p=e("../../compile/ref_error"),f=e("../code"),h=e("../../compile/codegen"),y=e("../../compile/names"),v=e("../../compile"),g=e("../../compile/util");e={keyword:"$ref",schemaType:"string",code(e){const{gen:t,schema:r,it:a}=e,{baseId:o,schemaEnv:s,validateName:n,opts:i,self:c}=a,l=s["root"];if("#"!==r&&"#/"!==r||o!==l.baseId){var d,u,m=v.resolveRef.call(c,l,o,r);if(void 0===m)throw new p.default(a.opts.uriResolver,o,r);return m instanceof v.SchemaEnv?(d=$(e,u=m),void _(e,d,u,u.$async)):(d=m,u=t.scopeValue("schema",!0===i.code.source?{ref:d,code:(0,h.stringify)(d)}:{ref:d}),m=t.name("valid"),d=e.subschema({schema:d,dataTypes:[],schemaPath:h.nil,topSchemaRef:u,errSchemaPath:r},m),e.mergeEvaluated(d),void e.ok(m))}if(s===l)return _(e,n,s,s.$async);m=t.scopeValue("root",{ref:l});return _(e,(0,h._)`${m}.validate`,l,l.$async)}};function $(e,t){const r=e["gen"];return t.validate?r.scopeValue("validate",{ref:t.validate}):(0,h._)`${r.scopeValue("wrapper",{ref:t})}.validate`}function _(e,t,a,r){const{gen:o,it:s}=e,{allErrors:n,schemaEnv:i,opts:c}=s,l=c.passContext?y.default.this:h.nil;if(r){if(!i.$async)throw new Error("async schema referenced by sync schema");const m=o.let("valid");o.try(()=>{o.code((0,h._)`await ${(0,f.callValidateCode)(e,t,l)}`),u(t),n||o.assign(m,!0)},e=>{o.if((0,h._)`!(${e} instanceof ${s.ValidationError})`,()=>o.throw(e)),d(e),n||o.assign(m,!1)}),e.ok(m)}else e.result((0,f.callValidateCode)(e,t,l),()=>u(t),()=>d(t));function d(e){e=(0,h._)`${e}.errors`;o.assign(y.default.vErrors,(0,h._)`${y.default.vErrors} === null ? ${e} : ${y.default.vErrors}.concat(${e})`),o.assign(y.default.errors,(0,h._)`${y.default.vErrors}.length`)}function u(e){var t,r;s.opts.unevaluated&&(t=null==(t=null==a?void 0:a.validate)?void 0:t.evaluated,!0!==s.props&&(t&&!t.dynamicProps?void 0!==t.props&&(s.props=g.mergeEvaluated.props(o,t.props,s.props)):(r=o.var("props",(0,h._)`${e}.evaluated.props`),s.props=g.mergeEvaluated.props(o,r,s.props,h.Name))),!0!==s.items&&(t&&!t.dynamicItems?void 0!==t.items&&(s.items=g.mergeEvaluated.items(o,t.items,s.items)):(r=o.var("items",(0,h._)`${e}.evaluated.items`),s.items=g.mergeEvaluated.items(o,r,s.items,h.Name))))}}r.getValidate=$,r.callRef=_,r.default=e},{"../../compile":5,"../../compile/codegen":2,"../../compile/names":6,"../../compile/ref_error":7,"../../compile/util":10,"../code":51}],55:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const n=e("../../compile/codegen"),i=e("../discriminator/types"),m=e("../../compile"),p=e("../../compile/util");r.default={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:e,tagName:t}})=>e===i.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:r}})=>(0,n._)`{error: ${e}, tag: ${r}, tagValue: ${t}}`},code(r){const{gen:a,data:e,schema:t,parentSchema:c,it:l}=r,d=c["oneOf"];if(!l.opts.discriminator)throw new Error("discriminator: requires discriminator option");const u=t.propertyName;if("string"!=typeof u)throw new Error("discriminator: requires propertyName");if(t.mapping)throw new Error("discriminator: mapping is not supported");if(!d)throw new Error("discriminator: requires oneOf keyword");const o=a.let("valid",!1),s=a.const("tag",(0,n._)`${e}${(0,n.getProperty)(u)}`);a.if((0,n._)`typeof ${s} == "string"`,()=>{var e=function(){const r={},a=n(c);let o=!0;for(let t=0;tr.error(!1,{discrError:i.DiscrError.Tag,tag:s,tagName:u})),r.ok(o)}}},{"../../compile":5,"../../compile/codegen":2,"../../compile/util":10,"../discriminator/types":56}],56:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.DiscrError=void 0,(r=r.DiscrError||(r.DiscrError={})).Tag="tag",r.Mapping="mapping"},{}],57:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a=e("./core"),o=e("./validation");const s=e("./applicator");var n=e("./dynamic"),i=e("./next"),c=e("./unevaluated"),l=e("./format"),e=e("./metadata"),n=[n.default,a.default,o.default,(0,s.default)(!0),l.default,e.metadataVocabulary,e.contentVocabulary,i.default,c.default];r.default=n},{"./applicator":41,"./core":53,"./dynamic":60,"./format":64,"./metadata":65,"./next":66,"./unevaluated":67,"./validation":73}],58:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.dynamicAnchor=void 0;const n=e("../../compile/codegen"),i=e("../../compile/names"),c=e("../../compile"),l=e("../core/ref");e={keyword:"$dynamicAnchor",schemaType:"string",code:e=>a(e,e.schema)};function a(e,t){const{gen:r,it:a}=e,o=(a.schemaEnv.root.dynamicAnchors[t]=!0,(0,n._)`${i.default.dynamicAnchors}${(0,n.getProperty)(t)}`),s="#"===a.errSchemaPath?a.validateName:function(e){var{schemaEnv:t,schema:r,self:a}=e.it,{root:t,baseId:o,localRefs:s,meta:n}=t.root,i=a.opts["schemaId"],r=new c.SchemaEnv({schema:r,schemaId:i,root:t,baseId:o,localRefs:s,meta:n});return c.compileSchema.call(a,r),(0,l.getValidate)(e,r)}(e);r.if((0,n._)`!${o}`,()=>r.assign(o,s))}r.dynamicAnchor=a,r.default=e},{"../../compile":5,"../../compile/codegen":2,"../../compile/names":6,"../core/ref":54}],59:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.dynamicRef=void 0;const c=e("../../compile/codegen"),l=e("../../compile/names"),d=e("../core/ref");e={keyword:"$dynamicRef",schemaType:"string",code:e=>a(e,e.schema)};function a(r,e){const{gen:a,keyword:t,it:o}=r;if("#"!==e[0])throw new Error(`"${t}" only supports hash fragment reference`);const s=e.slice(1);function n(e){var t;o.schemaEnv.root.dynamicAnchors[s]?(t=a.let("_v",(0,c._)`${l.default.dynamicAnchors}${(0,c.getProperty)(s)}`),a.if(t,i(t,e),i(o.validateName,e))):i(o.validateName,e)()}function i(e,t){return t?()=>a.block(()=>{(0,d.callRef)(r,e),a.let(t,!0)}):()=>(0,d.callRef)(r,e)}o.allErrors?n():(n(e=a.let("valid",!1)),r.ok(e))}r.dynamicRef=a,r.default=e},{"../../compile/codegen":2,"../../compile/names":6,"../core/ref":54}],60:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a=e("./dynamicAnchor"),o=e("./dynamicRef"),s=e("./recursiveAnchor"),e=e("./recursiveRef"),a=[a.default,o.default,s.default,e.default];r.default=a},{"./dynamicAnchor":58,"./dynamicRef":59,"./recursiveAnchor":61,"./recursiveRef":62}],61:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("./dynamicAnchor"),o=e("../../compile/util");r.default={keyword:"$recursiveAnchor",schemaType:"boolean",code(e){e.schema?(0,a.dynamicAnchor)(e,""):(0,o.checkStrictMode)(e.it,"$recursiveAnchor: false is ignored")}}},{"../../compile/util":10,"./dynamicAnchor":58}],62:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("./dynamicRef");r.default={keyword:"$recursiveRef",schemaType:"string",code:e=>(0,a.dynamicRef)(e,e.schema)}},{"./dynamicRef":59}],63:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const b=e("../../compile/codegen");r.default={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:e})=>(0,b.str)`must match format "${e}"`,params:({schemaCode:e})=>(0,b._)`{format: ${e}}`},code(e,t){const{gen:r,data:a,$data:o,schema:s,schemaCode:n,it:i}=e,{opts:c,errSchemaPath:l,schemaEnv:d,self:u}=i;if(c.validateFormats)if(o){const p=r.scopeValue("formats",{ref:u.formats,code:c.code.formats}),f=r.const("fDef",(0,b._)`${p}[${n}]`),h=r.let("fType"),y=r.let("format");r.if((0,b._)`typeof ${f} == "object" && !(${f} instanceof RegExp)`,()=>r.assign(h,(0,b._)`${f}.type || "string"`).assign(y,(0,b._)`${f}.validate`),()=>r.assign(h,(0,b._)`"string"`).assign(y,f)),e.fail$data((0,b.or)(!1===c.strictSchema?b.nil:(0,b._)`${n} && !${y}`,function(){var e=d.$async?(0,b._)`(${f}.async ? await ${y}(${a}) : ${y}(${a}))`:(0,b._)`${y}(${a})`,e=(0,b._)`(typeof ${y} == "function" ? ${e} : ${y}.test(${a}))`;return(0,b._)`${y} && ${y} !== true && ${h} === ${t} && !${e}`}()))}else{const v=u.formats[s];if(v){if(!0!==v){const[g,$,_]=function(e){var t=e instanceof RegExp?(0,b.regexpCode)(e):c.code.formats?(0,b._)`${c.code.formats}${(0,b.getProperty)(s)}`:void 0,t=r.scopeValue("formats",{key:s,ref:e,code:t});return"object"!=typeof e||e instanceof RegExp?["string",e,t]:[e.type||"string",e.validate,(0,b._)`${t}.validate`]}(v);g===t&&e.pass(function(){if("object"!=typeof v||v instanceof RegExp||!v.async)return"function"==typeof $?(0,b._)`${_}(${a})`:(0,b._)`${_}.test(${a})`;if(d.$async)return(0,b._)`await ${_}(${a})`;throw new Error("async format in sync schema")}())}}else{if(!1!==c.strictSchema)throw new Error(m());function m(){return`unknown format "${s}" ignored in schema at path "${l}"`}u.logger.warn(m())}}}}},{"../../compile/codegen":2}],64:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});e=[e("./format").default];r.default=e},{"./format":63}],65:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.contentVocabulary=r.metadataVocabulary=void 0,r.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],r.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]},{}],66:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a=e("./validation/dependentRequired"),o=e("./applicator/dependentSchemas"),e=e("./validation/limitContains"),a=[a.default,o.default,e.default];r.default=a},{"./applicator/dependentSchemas":39,"./validation/dependentRequired":71,"./validation/limitContains":74}],67:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a=e("./unevaluatedProperties"),e=e("./unevaluatedItems"),a=[a.default,e.default];r.default=a},{"./unevaluatedItems":68,"./unevaluatedProperties":69}],68:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const c=e("../../compile/codegen"),l=e("../../compile/util");r.default={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:{message:({params:{len:e}})=>(0,c.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,c._)`{limit: ${e}}`},code(r){const{gen:a,schema:e,data:t,it:o}=r,s=o.items||0;if(!0!==s){const n=a.const("len",(0,c._)`${t}.length`);if(!1===e)r.setParams({len:s}),r.fail((0,c._)`${n} > ${s}`);else if("object"==typeof e&&!(0,l.alwaysValidSchema)(o,e)){const i=a.var("valid",(0,c._)`${n} <= ${s}`);a.if((0,c.not)(i),()=>{var t=i,e=s;a.forRange("i",e,n,e=>{r.subschema({keyword:"unevaluatedItems",dataProp:e,dataPropType:l.Type.Num},t),o.allErrors||a.if((0,c.not)(t),()=>a.break())})}),r.ok(i)}o.items=!0}}}},{"../../compile/codegen":2,"../../compile/util":10}],69:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const l=e("../../compile/codegen"),d=e("../../compile/util"),u=e("../../compile/names");r.default={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:{message:"must NOT have unevaluated properties",params:({params:e})=>(0,l._)`{unevaluatedProperty: ${e.unevaluatedProperty}}`},code(r){const{gen:a,schema:o,data:e,errsCount:t,it:s}=r;if(!t)throw new Error("ajv implementation error");const{allErrors:n,props:i}=s;function c(e){if(!1===o)return r.setParams({unevaluatedProperty:e}),r.error(),void(n||a.break());var t;(0,d.alwaysValidSchema)(s,o)||(t=a.name("valid"),r.subschema({keyword:"unevaluatedProperties",dataProp:e,dataPropType:d.Type.Str},t),n||a.if((0,l.not)(t),()=>a.break()))}i instanceof l.Name?a.if((0,l._)`${i} !== true`,()=>a.forIn("key",e,e=>a.if(function(e,t){return(0,l._)`!${e} || !${e}[${t}]`}(i,e),()=>c(e)))):!0!==i&&a.forIn("key",e,e=>void 0===i?c(e):a.if(function(e,t){const r=[];for(const a in e)!0===e[a]&&r.push((0,l._)`${t} !== ${a}`);return(0,l.and)(...r)}(i,e),()=>c(e))),s.props=!0,r.ok((0,l._)`${t} === ${u.default.errors}`)}}},{"../../compile/codegen":2,"../../compile/names":6,"../../compile/util":10}],70:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const n=e("../../compile/codegen"),i=e("../../compile/util"),c=e("../../runtime/equal");r.default={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:e})=>(0,n._)`{allowedValue: ${e}}`},code(e){var{gen:t,data:r,$data:a,schemaCode:o,schema:s}=e;a||s&&"object"==typeof s?e.fail$data((0,n._)`!${(0,i.useFunc)(t,c.default)}(${r}, ${o})`):e.fail((0,n._)`${s} !== ${r}`)}}},{"../../compile/codegen":2,"../../compile/util":10,"../../runtime/equal":29}],71:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("../applicator/dependencies");e={keyword:"dependentRequired",type:"object",schemaType:"object",error:a.error,code:e=>(0,a.validatePropertyDeps)(e)};r.default=e},{"../applicator/dependencies":38}],72:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const m=e("../../compile/codegen"),p=e("../../compile/util"),f=e("../../runtime/equal");r.default={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:e})=>(0,m._)`{allowedValues: ${e}}`},code(e){const{gen:t,data:o,$data:r,schema:s,schemaCode:a,it:n}=e;if(!r&&0===s.length)throw new Error("enum must have non-empty array");var i=s.length>=n.opts.loopEnum;let c;const l=()=>null!==c&&void 0!==c?c:c=(0,p.useFunc)(t,f.default);let d;if(i||r)d=t.let("valid"),e.block$data(d,function(){t.assign(d,!1),t.forOf("v",a,e=>t.if((0,m._)`${l()}(${o}, ${e})`,()=>t.assign(d,!0).break()))});else{if(!Array.isArray(s))throw new Error("ajv implementation error");const u=t.const("vSchema",a);d=(0,m.or)(...s.map((e,t)=>{var r=u,a=s[t];return"object"==typeof a&&null!==a?(0,m._)`${l()}(${o}, ${r}[${t}])`:(0,m._)`${o} === ${a}`}))}e.pass(d)}}},{"../../compile/codegen":2,"../../compile/util":10,"../../runtime/equal":29}],73:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a=e("./limitNumber"),o=e("./multipleOf"),s=e("./limitLength"),n=e("./pattern"),i=e("./limitProperties"),c=e("./required"),l=e("./limitItems"),d=e("./uniqueItems"),u=e("./const"),e=e("./enum"),a=[a.default,o.default,s.default,n.default,i.default,c.default,l.default,d.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},u.default,e.default];r.default=a},{"./const":70,"./enum":72,"./limitItems":75,"./limitLength":76,"./limitNumber":77,"./limitProperties":78,"./multipleOf":79,"./pattern":80,"./required":81,"./uniqueItems":82}],74:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const a=e("../../compile/util");r.default={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:e,parentSchema:t,it:r}){void 0===t.contains&&(0,a.checkStrictMode)(r,`"${e}" without "contains" is ignored`)}}},{"../../compile/util":10}],75:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const o=e("../../compile/codegen");r.default={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){e="maxItems"===e?"more":"fewer";return(0,o.str)`must NOT have ${e} than ${t} items`},params:({schemaCode:e})=>(0,o._)`{limit: ${e}}`},code(e){var{keyword:t,data:r,schemaCode:a}=e,t="maxItems"===t?o.operators.GT:o.operators.LT;e.fail$data((0,o._)`${r}.length ${t} ${a}`)}}},{"../../compile/codegen":2}],76:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const s=e("../../compile/codegen"),n=e("../../compile/util"),i=e("../../runtime/ucs2length");r.default={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){e="maxLength"===e?"more":"fewer";return(0,s.str)`must NOT have ${e} than ${t} characters`},params:({schemaCode:e})=>(0,s._)`{limit: ${e}}`},code(e){var{keyword:t,data:r,schemaCode:a,it:o}=e,t="maxLength"===t?s.operators.GT:s.operators.LT,o=!1===o.opts.unicode?(0,s._)`${r}.length`:(0,s._)`${(0,n.useFunc)(e.gen,i.default)}(${r})`;e.fail$data((0,s._)`${o} ${t} ${a}`)}}},{"../../compile/codegen":2,"../../compile/util":10,"../../runtime/ucs2length":30}],77:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const o=e("../../compile/codegen");e=o.operators;const s={maximum:{okStr:"<=",ok:e.LTE,fail:e.GT},minimum:{okStr:">=",ok:e.GTE,fail:e.LT},exclusiveMaximum:{okStr:"<",ok:e.LT,fail:e.GTE},exclusiveMinimum:{okStr:">",ok:e.GT,fail:e.LTE}};e={message:({keyword:e,schemaCode:t})=>(0,o.str)`must be ${s[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>(0,o._)`{comparison: ${s[e].okStr}, limit: ${t}}`},e={keyword:Object.keys(s),type:"number",schemaType:"number",$data:!0,error:e,code(e){var{keyword:t,data:r,schemaCode:a}=e;e.fail$data((0,o._)`${r} ${s[t].fail} ${a} || isNaN(${r})`)}};r.default=e},{"../../compile/codegen":2}],78:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const o=e("../../compile/codegen");r.default={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){e="maxProperties"===e?"more":"fewer";return(0,o.str)`must NOT have ${e} than ${t} properties`},params:({schemaCode:e})=>(0,o._)`{limit: ${e}}`},code(e){var{keyword:t,data:r,schemaCode:a}=e,t="maxProperties"===t?o.operators.GT:o.operators.LT;e.fail$data((0,o._)`Object.keys(${r}).length ${t} ${a}`)}}},{"../../compile/codegen":2}],79:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const i=e("../../compile/codegen");r.default={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:e})=>(0,i.str)`must be multiple of ${e}`,params:({schemaCode:e})=>(0,i._)`{multipleOf: ${e}}`},code(e){const{gen:t,data:r,schemaCode:a,it:o}=e;var s=o.opts.multipleOfPrecision,n=t.let("res"),s=s?(0,i._)`Math.abs(Math.round(${n}) - ${n}) > 1e-${s}`:(0,i._)`${n} !== parseInt(${n})`;e.fail$data((0,i._)`(${a} === 0 || (${n} = ${r}/${a}, ${s}))`)}}},{"../../compile/codegen":2}],80:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const n=e("../code"),i=e("../../compile/codegen");r.default={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:e})=>(0,i.str)`must match pattern "${e}"`,params:({schemaCode:e})=>(0,i._)`{pattern: ${e}}`},code(e){var{data:t,$data:r,schema:a,schemaCode:o,it:s}=e,s=s.opts.unicodeRegExp?"u":"",r=r?(0,i._)`(new RegExp(${o}, ${s}))`:(0,n.usePattern)(e,a);e.fail$data((0,i._)`!${r}.test(${t})`)}}},{"../../compile/codegen":2,"../code":51}],81:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const v=e("../code"),g=e("../../compile/codegen"),$=e("../../compile/util");r.default={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:e}})=>(0,g.str)`must have required property '${e}'`,params:({params:{missingProperty:e}})=>(0,g._)`{missingProperty: ${e}}`},code(r){const{gen:a,schema:e,schemaCode:o,data:s,$data:t,it:n}=r,i=n["opts"];if(t||0!==e.length){const u=e.length>=i.loopRequired;if(n.allErrors)if(u||t)r.block$data(g.nil,d);else for(const m of e)(0,v.checkReportMissingProp)(r,m);else{const p=a.let("missing");if(u||t){const f=a.let("valid",!0);r.block$data(f,()=>{var e=p,t=f;r.setParams({missingProperty:e}),a.forOf(e,o,()=>{a.assign(t,(0,v.propertyInData)(a,s,e,i.ownProperties)),a.if((0,g.not)(t),()=>{r.error(),a.break()})},g.nil)}),r.ok(f)}else a.if((0,v.checkMissingProp)(r,e,p)),(0,v.reportMissingProp)(r,p),a.else()}if(i.strictRequired){var c,l=r.parentSchema.properties;const h=r.it["definedProperties"];for(const y of e)void 0!==(null==l?void 0:l[y])||h.has(y)||(c=n.schemaEnv.baseId+n.errSchemaPath,c=`required property "${y}" is not defined at "${c}" (strictRequired)`,(0,$.checkStrictMode)(n,c,n.opts.strictRequired))}function d(){a.forOf("prop",o,e=>{r.setParams({missingProperty:e}),a.if((0,v.noPropertyInData)(a,s,e,i.ownProperties),()=>r.error())})}}}}},{"../../compile/codegen":2,"../../compile/util":10,"../code":51}],82:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const u=e("../../compile/validate/dataType"),m=e("../../compile/codegen"),o=e("../../compile/util"),p=e("../../runtime/equal");r.default={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:e,j:t}})=>(0,m.str)`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>(0,m._)`{i: ${e}, j: ${t}}`},code(s){const{gen:n,data:i,$data:e,schema:t,parentSchema:r,schemaCode:a,it:c}=s;if(e||t){const l=n.let("valid"),d=r.items?(0,u.getSchemaTypes)(r.items):[];s.block$data(l,function(){const e=n.let("i",(0,m._)`${i}.length`),t=n.let("j");s.setParams({i:e,j:t}),n.assign(l,!0),n.if((0,m._)`${e} > 1`,()=>(function(){return 0"object"===e||"array"===e)}()?function(e,t){const r=n.name("item"),a=(0,u.checkDataTypes)(d,r,c.opts.strictNumbers,u.DataType.Wrong),o=n.const("indices",(0,m._)`{}`);n.for((0,m._)`;${e}--;`,()=>{n.let(r,(0,m._)`${i}[${e}]`),n.if(a,(0,m._)`continue`),1{n.assign(t,(0,m._)`${o}[${r}]`),s.error(),n.assign(l,!1).break()}).code((0,m._)`${o}[${r}] = ${e}`)})}:function(e,t){const r=(0,o.useFunc)(n,p.default),a=n.name("outer");n.label(a).for((0,m._)`;${e}--;`,()=>n.for((0,m._)`${t} = ${e}; ${t}--;`,()=>n.if((0,m._)`${r}(${i}[${e}], ${i}[${t}])`,()=>{s.error(),n.assign(l,!1).break(a)})))})(e,t))},(0,m._)`${a} === false`),s.ok(l)}}}},{"../../compile/codegen":2,"../../compile/util":10,"../../compile/validate/dataType":13,"../../runtime/equal":29}],83:[function(e,t,r){"use strict";t.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var a,o,s;if(Array.isArray(t)){if((a=t.length)!=r.length)return!1;for(o=a;0!=o--;)if(!e(t[o],r[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((a=(s=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(o=a;0!=o--;)if(!Object.prototype.hasOwnProperty.call(r,s[o]))return!1;for(o=a;0!=o--;){var n=s[o];if(!e(t[n],r[n]))return!1}return!0}return t!=t&&r!=r}},{}],84:[function(e,t,r){"use strict";var h=t.exports=function(e,t,r){"function"==typeof t&&(r=t,t={}),function e(t,r,a,o,s,n,i,c,l,d){if(o&&"object"==typeof o&&!Array.isArray(o)){for(var u in r(o,s,n,i,c,l,d),o){var m=o[u];if(Array.isArray(m)){if(u in h.arrayKeywords)for(var p=0;p= 0x80 (not a basic code point)","invalid-input":"Invalid input"},o=x-1,I=Math.floor,A=String.fromCharCode;function D(e){throw new RangeError(U[e])}function r(e,t){var r=e.split("@"),a="",r=(1>1,e+=I(e/t);o*T>>1I((R-a)/d))&&D("overflow"),a+=m*d,u<=s?1:s+T<=u?T:u-s);if(mI(R/m)&&D("overflow"),d*=m}var f=t.length+1,s=V(a-l,f,0==l);I(a/f)>R-o&&D("overflow"),o+=I(a/f),a%=f,t.splice(a++,0,o)}return String.fromCodePoint.apply(String,t)}function L(e){var t=[],r=(e=z(e)).length,a=128,o=0,s=72,n=!0,i=!1,c=void 0;try{for(var l,d=e[Symbol.iterator]();!(n=(l=d.next()).done);n=!0){var u=l.value;u<128&&t.push(A(u))}}catch(e){i=!0,c=e}finally{try{!n&&d.return&&d.return()}finally{if(i)throw c}}var m=t.length,p=m;for(m&&t.push("-");pI((R-o)/b)&&D("overflow"),o+=(f-a)*b,a=f,!0),y=!1,v=void 0;try{for(var E,P=e[Symbol.iterator]();!(w=(E=P.next()).done);w=!0){var S=E.value;if(SR&&D("overflow"),S==a){for(var j=o,N=x;;N+=x){var k=N<=s?1:s+T<=N?T:N-s;if(j>6|192).toString(16).toUpperCase()+"%"+(63&e|128).toString(16).toUpperCase():"%"+(e>>12|224).toString(16).toUpperCase()+"%"+(e>>6&63|128).toString(16).toUpperCase()+"%"+(63&e|128).toString(16).toUpperCase()}function d(e){for(var t="",r=0,a=e.length;rA-Z\\x5E-\\x7E]",'[\\"\\\\]')),oe=new RegExp(w,"g"),j=new RegExp("(?:(?:%[EFef][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f])|(?:%[89A-Fa-f][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f])|(?:%[0-9A-Fa-f][0-9A-Fa-f]))","g"),se=new RegExp(P("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',E),"g"),ne=new RegExp(P("[^]",w,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),ie=ne;function N(e){var t=d(e);return t.match(oe)?t:e}var E={scheme:"mailto",parse:function(e,t){var r=e,a=r.to=r.path?r.path.split(","):[];if(r.path=void 0,r.query){for(var o=!1,s={},n=r.query.split("&"),i=0,c=n.length;ithis.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(s.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();var{$data:e,meta:t}=this.opts;t&&(n.default.call(this,e),this.refs["http://json-schema.org/schema"]=i)}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(i)?i:void 0)}}t.exports=r=c,Object.defineProperty(r,"__esModule",{value:!0}),r.default=c;var l=e("./compile/validate"),d=(Object.defineProperty(r,"KeywordCxt",{enumerable:!0,get:function(){return l.KeywordCxt}}),e("./compile/codegen")),u=(Object.defineProperty(r,"_",{enumerable:!0,get:function(){return d._}}),Object.defineProperty(r,"str",{enumerable:!0,get:function(){return d.str}}),Object.defineProperty(r,"stringify",{enumerable:!0,get:function(){return d.stringify}}),Object.defineProperty(r,"nil",{enumerable:!0,get:function(){return d.nil}}),Object.defineProperty(r,"Name",{enumerable:!0,get:function(){return d.Name}}),Object.defineProperty(r,"CodeGen",{enumerable:!0,get:function(){return d.CodeGen}}),e("./runtime/validation_error")),m=(Object.defineProperty(r,"ValidationError",{enumerable:!0,get:function(){return u.default}}),e("./compile/ref_error"));Object.defineProperty(r,"MissingRefError",{enumerable:!0,get:function(){return m.default}})},{"./compile/codegen":2,"./compile/ref_error":7,"./compile/validate":15,"./core":18,"./refs/json-schema-2020-12":20,"./runtime/validation_error":32,"./vocabularies/discriminator":55,"./vocabularies/draft2020":57}]},{},[])("2020")}); \ No newline at end of file diff --git a/src/pretix/static/pretixcontrol/js/ui/editor.js b/src/pretix/static/pretixcontrol/js/ui/editor.js index ddb1687bb..da4509eb8 100644 --- a/src/pretix/static/pretixcontrol/js/ui/editor.js +++ b/src/pretix/static/pretixcontrol/js/ui/editor.js @@ -118,6 +118,7 @@ var editor = { uploaded_file_id: null, _window_loaded: false, _fabric_loaded: false, + schema: null, _px2mm: function (v) { return v / editor.pdf_scale / 72 * editor.pdf_page.userUnit * 25.4; @@ -988,8 +989,26 @@ var editor = { }, _source_save: function () { - editor.load(JSON.parse($("#source-textarea").val())); - $("#source-container").hide(); + try { + var Ajv = window.ajv2020 + var ajv = new Ajv() + var validate = ajv.compile(editor.schema) + var data = JSON.parse($("#source-textarea").val()) + var valid = validate(data) + + if (!valid) { + console.log(validate.errors) + alert("Invalid input syntax. If you're familiar with this, check out the developer console for a full " + + "error log. Otherwise, please contact support.") + } else { + editor.load(data); + $("#source-container").hide(); + } + } catch (e) { + console.error(e) + alert("Parsing error. If you're familiar with this, check out the developer console for a full " + + "error log. Otherwise, please contact support.") + } }, _create_empty_background: function () { @@ -1098,6 +1117,10 @@ var editor = { $("#toolbox-source").bind('click', editor._source_show); $("#source-close").bind('click', editor._source_close); $("#source-save").bind('click', editor._source_save); + + $.getJSON($("#schema-url").text(), function (data) { + editor.schema = data; + }) } }; diff --git a/src/pretix/static/schema/pdf-layout.schema.json b/src/pretix/static/schema/pdf-layout.schema.json new file mode 100644 index 000000000..d205881fc --- /dev/null +++ b/src/pretix/static/schema/pdf-layout.schema.json @@ -0,0 +1,371 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Ticket Layout", + "description": "Dynamic elements for a PDF layout", + "type": "array", + "items": { + "type": "object", + "description": "Layout object", + "oneOf": [ + { + "required": [ + "type", + "left", + "bottom", + "size" + ], + "properties": { + "type": { + "type": "string", + "const": "barcodearea" + }, + "page": { + "description": "Page number this will be shown on, defaults to 1.", + "type": "number" + }, + "left": { + "description": "Position of the element on the x axis in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "bottom": { + "description": "Position of the element on the y axis in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "content": { + "description": "Name of a variable to use. The available values depend on event configuration and installed plugins. Defaults to 'secret'.", + "type": "string" + }, + "text": { + "description": "Custom text. Only used when 'content' is set to 'other'.", + "type": "string" + }, + "text_i18n": { + "description": "Custom text in multiple languages. Only used when 'content' is set to 'other_i18n'.", + "type": "object", + "patternProperties": { + "[a-zA-Z-]+": { + "type": "string" + } + }, + "additionalProperties": false + }, + "size": { + "description": "Size of the barcode in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "nowhitespace": { + "description": "Whether a barcode should be rendered without margins. Only used for type 'barcodearea'.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + { + "required": [ + "type", + "left", + "bottom", + "content", + "width", + "height" + ], + "properties": { + "type": { + "type": "string", + "const": "imagearea" + }, + "page": { + "description": "Page number this will be shown on, defaults to 1.", + "type": "number" + }, + "left": { + "description": "Position of the element on the x axis in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "bottom": { + "description": "Position of the element on the y axis in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "content": { + "description": "Name of a variable to use. The available values depend on event configuration and installed plugins.", + "type": "string" + }, + "width": { + "description": "Width of the element in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "height": { + "description": "Height of the element in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + } + }, + "additionalProperties": false + }, + { + "required": [ + "type", + "left", + "bottom", + "content", + "width", + "fontsize", + "fontfamily", + "bold", + "italic", + "align", + "color" + ], + "properties": { + "type": { + "type": "string", + "const": "textarea" + }, + "page": { + "description": "Page number this will be shown on, defaults to 1.", + "type": "number" + }, + "left": { + "description": "Position of the element on the x axis in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "bottom": { + "description": "Position of the element on the y axis in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "width": { + "description": "Width of the element in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "content": { + "description": "Name of a variable to use. The available values depend on event configuration and installed plugins.", + "type": "string" + }, + "text": { + "description": "Custom text. Only used when 'content' is set to 'other'.", + "type": "string" + }, + "text_i18n": { + "description": "Custom text in multiple languages. Only used when 'content' is set to 'other_i18n'.", + "type": "object", + "patternProperties": { + "[a-zA-Z-]+": { + "type": "string" + } + }, + "additionalProperties": false + }, + "locale": { + "description": "Locale to render the text in.", + "type": ["string", "null"], + "pattern": "[a-zA-Z-]*" + }, + "fontsize": { + "description": "Font size.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "fontfamily": { + "description": "Font family. The available values depend on installed plugins.", + "type": "string" + }, + "bold": { + "description": "Use bold font variant.", + "type": "boolean" + }, + "italic": { + "description": "Use italic font variant.", + "type": "boolean" + }, + "align": { + "description": "Text alignment.", + "type": "string", + "enum": [ + "left", + "center", + "right" + ] + }, + "color": { + "description": "Text color as a tuple of three integers in the 0-255 range and one float in the 0-1 range. The last value (alpha) is ignored by the current implementation but might be used in the future.", + "type": "array", + "items": { + "type": "number", + "minimum": 0, + "maximum": 255 + }, + "minItems": 3, + "maxItems": 4 + }, + "downward": { + "description": "Downward rendering of text (recommended for new layouts), but default is false for backwards-compatibility.", + "type": "boolean" + }, + "rotation": { + "description": "Rotation in degrees.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + } + }, + "additionalProperties": false + }, + { + "required": [ + "type", + "left", + "bottom", + "content", + "size" + ], + "properties": { + "type": { + "type": "string", + "const": "poweredby" + }, + "page": { + "description": "Page number this will be shown on, defaults to 1.", + "type": "number" + }, + "left": { + "description": "Position of the element on the x axis in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "bottom": { + "description": "Position of the element on the y axis in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + }, + "content": { + "description": "Name of a style to use. The available values currently are 'dark' and 'white'.", + "type": "string", + "enum": [ + "dark", + "white" + ] + }, + "size": { + "description": "Size of the logo in millimeters.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string", + "pattern": "^[0-9]+(\\.[0-9]+)?$" + } + ] + } + }, + "additionalProperties": false + } + ] + } +} diff --git a/src/tests/plugins/ticketoutputpdf/test_api.py b/src/tests/plugins/ticketoutputpdf/test_api.py index 9eea0b7b3..f22f84229 100644 --- a/src/tests/plugins/ticketoutputpdf/test_api.py +++ b/src/tests/plugins/ticketoutputpdf/test_api.py @@ -23,9 +23,12 @@ import copy import json import pytest +from django.core.files.base import ContentFile from django.utils.timezone import now +from django_scopes import scopes_disabled +from rest_framework.test import APIClient -from pretix.base.models import Event, Item, Organizer, Team, User +from pretix.base.models import Event, Item, Organizer, Team from pretix.plugins.ticketoutputpdf.models import TicketLayoutItem @@ -36,14 +39,25 @@ def env(): organizer=o, name='Dummy', slug='dummy', date_from=now(), plugins='pretix.plugins.banktransfer' ) - user = User.objects.create_user('dummy@dummy.dummy', 'dummy') t = Team.objects.create(organizer=event.organizer) - t.members.add(user) t.limit_events.add(event) item1 = Item.objects.create(event=event, name="Ticket", default_price=23) tl = event.ticket_layouts.create(name="Foo", default=True, layout='[{"a": 2}]') TicketLayoutItem.objects.create(layout=tl, item=item1) - return event, user, tl, item1 + return event, tl, item1 + + +@pytest.fixture +def client(): + return APIClient() + + +@pytest.fixture +@scopes_disabled() +def token_client(client, env): + t = env[0].organizer.teams.get().tokens.create(name="Foo") + client.credentials(HTTP_AUTHORIZATION="Token " + t.token) + return client RES_LAYOUT = { @@ -57,32 +71,145 @@ RES_LAYOUT = { @pytest.mark.django_db -def test_api_list(env, client): +def test_api_list(env, token_client): res = copy.copy(RES_LAYOUT) - res['id'] = env[2].pk - res['item_assignments'][0]['item'] = env[3].pk - client.login(email='dummy@dummy.dummy', password='dummy') - r = json.loads( - client.get('/api/v1/organizers/{}/events/{}/ticketlayouts/'.format( - env[0].slug, env[0].organizer.slug)).content.decode('utf-8') - ) + res['id'] = env[1].pk + res['item_assignments'][0]['item'] = env[2].pk + r = token_client.get('/api/v1/organizers/{}/events/{}/ticketlayouts/'.format( + env[0].organizer.slug, env[0].slug)).data + assert r['results'] == [res] - r = json.loads( - client.get('/api/v1/organizers/{}/events/{}/ticketlayoutitems/'.format( - env[0].slug, env[0].organizer.slug)).content.decode('utf-8') - ) - assert r['results'] == [{'item': env[3].pk, 'layout': env[2].pk, 'id': env[2].item_assignments.first().pk, + r = token_client.get('/api/v1/organizers/{}/events/{}/ticketlayoutitems/'.format( + env[0].organizer.slug, env[0].slug)).data + assert r['results'] == [{'item': env[2].pk, 'layout': env[1].pk, 'id': env[1].item_assignments.first().pk, 'sales_channel': 'web'}] @pytest.mark.django_db -def test_api_detail(env, client): +def test_api_detail(env, token_client): res = copy.copy(RES_LAYOUT) - res['id'] = env[2].pk - res['item_assignments'][0]['item'] = env[3].pk - client.login(email='dummy@dummy.dummy', password='dummy') - r = json.loads( - client.get('/api/v1/organizers/{}/events/{}/ticketlayouts/{}/'.format( - env[0].slug, env[0].organizer.slug, env[2].pk)).content.decode('utf-8') - ) + res['id'] = env[1].pk + res['item_assignments'][0]['item'] = env[2].pk + r = token_client.get('/api/v1/organizers/{}/events/{}/ticketlayouts/{}/'.format( + env[0].organizer.slug, env[0].slug, env[1].pk)).data assert r == res + + +@pytest.mark.django_db +def test_api_create(env, token_client): + r = token_client.post( + '/api/v1/upload', + data={ + 'media_type': 'application/pdf', + 'file': ContentFile('file.pdf', 'invalid pdf content') + }, + format='upload', + HTTP_CONTENT_DISPOSITION='attachment; filename="file.pdf"', + ) + assert r.status_code == 201 + file_id_png = r.data['id'] + + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/ticketlayouts/'.format(env[0].slug, env[0].slug), + { + 'name': 'Foo', + 'default': False, + "background": file_id_png, + 'layout': [], + }, + format='json' + ) + assert resp.status_code == 201 + tl = env[0].ticket_layouts.get(pk=resp.data["id"]) + assert tl.background + + +@pytest.mark.django_db +def test_api_create_validate_default(env, token_client): + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/ticketlayouts/'.format(env[0].slug, env[0].slug), + { + 'name': 'Foo', + 'default': True, + 'layout': [], + }, + format='json' + ) + assert resp.status_code == 400 + assert resp.data == {"non_field_errors": ["You cannot have two layouts with default = True"]} + + +@pytest.mark.django_db +def test_api_create_validate_layout(env, token_client): + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/ticketlayouts/'.format(env[0].slug, env[0].slug), + { + 'name': 'Foo', + 'default': True, + 'layout': [ + { + "foo": "bar" + } + ], + }, + format='json' + ) + assert resp.status_code == 400 + assert resp.data["layout"][0].startswith("Your layout file is not a valid layout. Error message:") + + +@pytest.mark.django_db +def test_api_update(env, token_client): + r = token_client.post( + '/api/v1/upload', + data={ + 'media_type': 'application/pdf', + 'file': ContentFile('file.pdf', 'invalid pdf content') + }, + format='upload', + HTTP_CONTENT_DISPOSITION='attachment; filename="file.pdf"', + ) + assert r.status_code == 201 + file_id_png = r.data['id'] + + resp = token_client.patch( + '/api/v1/organizers/{}/events/{}/ticketlayouts/{}/'.format(env[0].slug, env[0].slug, env[1].pk), + { + "name": "Bar", + "background": file_id_png, + "layout": [ + {"type": "barcodearea", "left": "7.00", "bottom": "11.15", "size": "45.00", "content": "secret"} + ] + }, + format='json' + ) + assert resp.status_code == 200 + env[1].refresh_from_db() + assert env[1].name == "Bar" + assert env[1].background + assert json.loads(env[1].layout) == [ + {"type": "barcodearea", "left": "7.00", "bottom": "11.15", "size": "45.00", "content": "secret"} + ] + + +@pytest.mark.django_db +def test_api_update_validate_default(env, token_client): + tl2 = env[0].ticket_layouts.create(name="Foo", default=False, layout='[{"a": 2}]') + resp = token_client.patch( + '/api/v1/organizers/{}/events/{}/ticketlayouts/{}/'.format(env[0].slug, env[0].slug, tl2.pk), + { + "default": True, + }, + format='json' + ) + assert resp.status_code == 400 + assert resp.data == {"non_field_errors": ["You cannot have two layouts with default = True"]} + + +@pytest.mark.django_db +def test_api_delete(env, token_client): + resp = token_client.delete( + '/api/v1/organizers/{}/events/{}/ticketlayouts/{}/'.format(env[0].slug, env[0].slug, env[1].pk), + ) + assert resp.status_code == 204 + assert not env[0].ticket_layouts.exists()