diff --git a/OMICRON_VERSION b/OMICRON_VERSION index 69cd6bb..669b50f 100644 --- a/OMICRON_VERSION +++ b/OMICRON_VERSION @@ -1 +1 @@ -a796560cf630b9eef6197c7ab80f5743051714c2 +4e4965085e19c6c7212d081a00e3207e7925e37d diff --git a/client/Api.ts b/client/Api.ts index 8adde87..c5e96ff 100644 --- a/client/Api.ts +++ b/client/Api.ts @@ -68,9 +68,7 @@ export type Binint64 = { export type BlockSize = 512 | 2048 | 4096; /** - * A count of bytes, typically used either for memory or storage capacity - * - * The maximum supported byte count is `i64::MAX`. This makes it somewhat inconvenient to define constructors: a u32 constructor can be infallible, but an i64 constructor can fail (if the value is negative) and a u64 constructor can fail (if the value is larger than i64::MAX). We provide all of these for consumers' convenience. + * Byte count to express memory or storage capacity. */ export type ByteCount = number; @@ -87,7 +85,7 @@ export type Name = string; export type ServiceUsingCertificate = "external_api"; /** - * Client view of a {@link Certificate} + * View of a Certificate */ export type Certificate = { /** human-readable free-form text about a resource */ @@ -104,7 +102,7 @@ export type Certificate = { }; /** - * Create-time parameters for a {@link Certificate} + * Create-time parameters for a `Certificate` */ export type CertificateCreate = { /** PEM file containing public certificate chain */ @@ -178,25 +176,24 @@ export type Cumulativedouble = { startTime: Date; value: number }; export type Cumulativeint64 = { startTime: Date; value: number }; /** - * A simple type for managing a histogram metric. + * Info about the current user + */ +export type CurrentUser = { + /** Human-readable name that can identify the user */ + displayName: string; + id: string; + /** Uuid of the silo to which this user belongs */ + siloId: string; + /** Name of the silo to which this user belongs. */ + siloName: Name; +}; + +/** + * Histogram metric * * A histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any "gaps" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support. * * Note that any gaps, unsorted bins, or non-finite values will result in an error. - * - * Example ------- ```rust use oximeter::histogram::{BinRange, Histogram}; - * - * let edges = [0i64, 10, 20]; let mut hist = Histogram::new(&edges).unwrap(); assert_eq!(hist.n_bins(), 4); // One additional bin for the range (20..) assert_eq!(hist.n_samples(), 0); hist.sample(4); hist.sample(100); assert_eq!(hist.n_samples(), 2); - * - * let data = hist.iter().collect::>(); assert_eq!(data[0].range, BinRange::range(i64::MIN, 0)); // An additional bin for `..0` assert_eq!(data[0].count, 0); // Nothing is in this bin - * - * assert_eq!(data[1].range, BinRange::range(0, 10)); // The range `0..10` assert_eq!(data[1].count, 1); // 4 is sampled into this bin ``` - * - * Notes ----- - * - * Histograms may be constructed either from their left bin edges, or from a sequence of ranges. In either case, the left-most bin may be converted upon construction. In particular, if the left-most value is not equal to the minimum of the support, a new bin will be added from the minimum to that provided value. If the left-most value _is_ the support's minimum, because the provided bin was unbounded below, such as `(..0)`, then that bin will be converted into one bounded below, `(MIN..0)` in this case. - * - * The short of this is that, most of the time, it shouldn't matter. If one specifies the extremes of the support as their bins, be aware that the left-most may be converted from a `BinRange::RangeTo` into a `BinRange::Range`. In other words, the first bin of a histogram is _always_ a `Bin::Range` or a `Bin::RangeFrom` after construction. In fact, every bin is one of those variants, the `BinRange::RangeTo` is only provided as a convenience during construction. */ export type Histogramint64 = { bins: Binint64[]; @@ -205,25 +202,11 @@ export type Histogramint64 = { }; /** - * A simple type for managing a histogram metric. + * Histogram metric * * A histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any "gaps" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support. * * Note that any gaps, unsorted bins, or non-finite values will result in an error. - * - * Example ------- ```rust use oximeter::histogram::{BinRange, Histogram}; - * - * let edges = [0i64, 10, 20]; let mut hist = Histogram::new(&edges).unwrap(); assert_eq!(hist.n_bins(), 4); // One additional bin for the range (20..) assert_eq!(hist.n_samples(), 0); hist.sample(4); hist.sample(100); assert_eq!(hist.n_samples(), 2); - * - * let data = hist.iter().collect::>(); assert_eq!(data[0].range, BinRange::range(i64::MIN, 0)); // An additional bin for `..0` assert_eq!(data[0].count, 0); // Nothing is in this bin - * - * assert_eq!(data[1].range, BinRange::range(0, 10)); // The range `0..10` assert_eq!(data[1].count, 1); // 4 is sampled into this bin ``` - * - * Notes ----- - * - * Histograms may be constructed either from their left bin edges, or from a sequence of ranges. In either case, the left-most bin may be converted upon construction. In particular, if the left-most value is not equal to the minimum of the support, a new bin will be added from the minimum to that provided value. If the left-most value _is_ the support's minimum, because the provided bin was unbounded below, such as `(..0)`, then that bin will be converted into one bounded below, `(MIN..0)` in this case. - * - * The short of this is that, most of the time, it shouldn't matter. If one specifies the extremes of the support as their bins, be aware that the left-most may be converted from a `BinRange::RangeTo` into a `BinRange::Range`. In other words, the first bin of a histogram is _always_ a `Bin::Range` or a `Bin::RangeFrom` after construction. In fact, every bin is one of those variants, the `BinRange::RangeTo` is only provided as a convenience during construction. */ export type Histogramdouble = { bins: Bindouble[]; @@ -265,13 +248,21 @@ export type DeviceAuthVerify = { userCode: string }; export type Digest = { type: "sha256"; value: string }; /** - * State of a Disk (primarily: attached or not) + * State of a Disk */ export type DiskState = /** Disk is being initialized */ | { state: "creating" } /** Disk is ready but detached from any Instance */ | { state: "detached" } + /** Disk is ready to receive blocks from an external source */ + | { state: "import_ready" } + /** Disk is importing blocks from a URL */ + | { state: "importing_from_url" } + /** Disk is importing blocks from bulk writes */ + | { state: "importing_from_bulk_writes" } + /** Disk is being finalized to state Detached */ + | { state: "finalizing" } /** Disk is undergoing maintenance */ | { state: "maintenance" } /** Disk is being attached to the given Instance */ @@ -286,7 +277,7 @@ export type DiskState = | { state: "faulted" }; /** - * Client view of a {@link Disk} + * View of a Disk */ export type Disk = { blockSize: ByteCount; @@ -320,13 +311,13 @@ export type DiskSource = } /** Create a disk from a disk snapshot */ | { snapshotId: string; type: "snapshot" } - /** Create a disk from a project image */ + /** Create a disk from an image */ | { imageId: string; type: "image" } - /** Create a disk from a global image */ - | { imageId: string; type: "global_image" }; + /** Create a blank disk that will accept bulk writes or pull blocks from an external source. */ + | { blockSize: BlockSize; type: "importing_blocks" }; /** - * Create-time parameters for a {@link Disk} + * Create-time parameters for a `Disk` */ export type DiskCreate = { description: string; @@ -339,7 +330,10 @@ export type DiskCreate = { export type NameOrId = string | Name; -export type DiskPath = { disk: NameOrId }; +export type DiskPath = { + /** Name or ID of the disk */ + disk: NameOrId; +}; /** * A single page of results @@ -351,15 +345,7 @@ export type DiskResultsPage = { nextPage?: string; }; -/** - * OS image distribution - */ -export type Distribution = { - /** The name of the distribution (e.g. "alpine" or "ubuntu") */ - name: Name; - /** The version of the distribution (e.g. "3.10" or "18.04") */ - version: string; -}; +export type ExpectedDigest = { sha256: string }; /** * The kind of an external IP address for an instance @@ -383,6 +369,14 @@ export type ExternalIpResultsPage = { nextPage?: string; }; +/** + * Parameters for finalizing a disk + */ +export type FinalizeDisk = { + /** If specified a snapshot of the disk will be created with the given name during finalization. If not specified, a snapshot for the disk will _not_ be created. A snapshot can be manually created once the disk transitions into the `Detached` state. */ + snapshotName?: Name; +}; + export type FleetRole = "admin" | "collaborator" | "viewer"; /** @@ -402,7 +396,7 @@ export type FleetRoleRoleAssignment = { }; /** - * Client view of a `Policy`, which describes how this resource may be accessed + * Policy for a particular resource * * Note that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource. */ @@ -412,68 +406,7 @@ export type FleetRolePolicy = { }; /** - * Client view of global Images - */ -export type GlobalImage = { - /** size of blocks in bytes */ - blockSize: ByteCount; - /** human-readable free-form text about a resource */ - description: string; - /** Hash of the image contents, if applicable */ - digest?: Digest; - /** Image distribution */ - distribution: string; - /** unique, immutable, system-controlled identifier for each resource */ - id: string; - /** unique, mutable, user-controlled identifier for each resource */ - name: Name; - /** total size in bytes */ - size: ByteCount; - /** timestamp when this resource was created */ - timeCreated: Date; - /** timestamp when this resource was last modified */ - timeModified: Date; - /** URL source of this image, if any */ - url?: string; - /** Image version */ - version: string; -}; - -/** - * The source of the underlying image. - */ -export type ImageSource = - | { type: "url"; url: string } - | { id: string; type: "snapshot" } - /** Boot the Alpine ISO that ships with the Propolis zone. Intended for development purposes only. */ - | { type: "you_can_boot_anything_as_long_as_its_alpine" }; - -/** - * Create-time parameters for an {@link GlobalImage} - */ -export type GlobalImageCreate = { - /** block size in bytes */ - blockSize: BlockSize; - description: string; - /** OS image distribution */ - distribution: Distribution; - name: Name; - /** The source of the image's contents. */ - source: ImageSource; -}; - -/** - * A single page of results - */ -export type GlobalImageResultsPage = { - /** list of items on this page of results */ - items: GlobalImage[]; - /** token used to fetch the next page of results (if any) */ - nextPage?: string; -}; - -/** - * Client view of a {@link Group} + * View of a Group */ export type Group = { /** Human-readable name that can identify the group */ @@ -496,7 +429,7 @@ export type GroupResultsPage = { export type IdentityProviderType = "saml"; /** - * Client view of an {@link IdentityProvider} + * View of an Identity Provider */ export type IdentityProvider = { /** human-readable free-form text about a resource */ @@ -528,7 +461,7 @@ export type IdpMetadataSource = | { data: string; type: "base64_encoded_xml" }; /** - * Client view of project Images + * Client view of images */ export type Image = { /** size of blocks in bytes */ @@ -543,8 +476,8 @@ export type Image = { name: Name; /** The family of the operating system like Debian, Ubuntu, etc. */ os: string; - /** The project the image belongs to */ - projectId: string; + /** ID of the parent project if the image is a project image */ + projectId?: string; /** total size in bytes */ size: ByteCount; /** timestamp when this resource was created */ @@ -558,7 +491,16 @@ export type Image = { }; /** - * Create-time parameters for an {@link Image} + * The source of the underlying image. + */ +export type ImageSource = + | { type: "url"; url: string } + | { id: string; type: "snapshot" } + /** Boot the Alpine ISO that ships with the Propolis zone. Intended for development purposes only. */ + | { type: "you_can_boot_anything_as_long_as_its_alpine" }; + +/** + * Create-time parameters for an `Image` */ export type ImageCreate = { /** block size in bytes */ @@ -583,6 +525,24 @@ export type ImageResultsPage = { nextPage?: string; }; +/** + * Parameters for importing blocks with a bulk write + */ +export type ImportBlocksBulkWrite = { + base64EncodedData: string; + offset: number; +}; + +/** + * Parameters for importing blocks from a URL to a disk + */ +export type ImportBlocksFromUrl = { + /** Expected digest of all blocks when importing from a URL */ + expectedDigest?: ExpectedDigest; + /** the source to pull blocks from */ + url: string; +}; + /** * The number of CPUs in an Instance */ @@ -616,7 +576,7 @@ export type InstanceState = | "destroyed"; /** - * Client view of an {@link Instance} + * View of an Instance */ export type Instance = { /** human-readable free-form text about a resource */ @@ -663,9 +623,9 @@ export type InstanceDiskAttachment = }; /** - * Create-time parameters for a {@link NetworkInterface} + * Create-time parameters for an `InstanceNetworkInterface` */ -export type NetworkInterfaceCreate = { +export type InstanceNetworkInterfaceCreate = { description: string; /** The IP address for the interface. One will be auto-assigned if not provided. */ ip?: string; @@ -677,20 +637,20 @@ export type NetworkInterfaceCreate = { }; /** - * Describes an attachment of a `NetworkInterface` to an `Instance`, at the time the instance is created. + * Describes an attachment of an `InstanceNetworkInterface` to an `Instance`, at the time the instance is created. */ export type InstanceNetworkInterfaceAttachment = - /** Create one or more `NetworkInterface`s for the `Instance`. + /** Create one or more `InstanceNetworkInterface`s for the `Instance`. If more than one interface is provided, then the first will be designated the primary interface for the instance. */ - | { params: NetworkInterfaceCreate[]; type: "create" } + | { params: InstanceNetworkInterfaceCreate[]; type: "create" } /** The default networking configuration for an instance is to create a single primary interface with an automatically-assigned IP address. The IP will be pulled from the Project's default VPC / VPC Subnet. */ | { type: "default" } /** No network interfaces at all will be created for the instance. */ | { type: "none" }; /** - * Create-time parameters for an {@link Instance} + * Create-time parameters for an `Instance` */ export type InstanceCreate = { description: string; @@ -713,10 +673,71 @@ By default, all instances have outbound connectivity, but no inbound connectivit }; /** - * Migration parameters for an {@link Instance} + * Migration parameters for an `Instance` */ export type InstanceMigrate = { dstSledId: string }; +/** + * A MAC address + * + * A Media Access Control address, in EUI-48 format + */ +export type MacAddr = string; + +/** + * An `InstanceNetworkInterface` represents a virtual network interface device attached to an instance. + */ +export type InstanceNetworkInterface = { + /** human-readable free-form text about a resource */ + description: string; + /** unique, immutable, system-controlled identifier for each resource */ + id: string; + /** The Instance to which the interface belongs. */ + instanceId: string; + /** The IP address assigned to this interface. */ + ip: string; + /** The MAC address assigned to this interface. */ + mac: MacAddr; + /** unique, mutable, user-controlled identifier for each resource */ + name: Name; + /** True if this interface is the primary for the instance to which it's attached. */ + primary: boolean; + /** The subnet to which the interface belongs. */ + subnetId: string; + /** timestamp when this resource was created */ + timeCreated: Date; + /** timestamp when this resource was last modified */ + timeModified: Date; + /** The VPC to which the interface belongs. */ + vpcId: string; +}; + +/** + * A single page of results + */ +export type InstanceNetworkInterfaceResultsPage = { + /** list of items on this page of results */ + items: InstanceNetworkInterface[]; + /** token used to fetch the next page of results (if any) */ + nextPage?: string; +}; + +/** + * Parameters for updating an `InstanceNetworkInterface` + * + * Note that modifying IP addresses for an interface is not yet supported, a new interface must be created instead. + */ +export type InstanceNetworkInterfaceUpdate = { + description?: string; + name?: Name; + /** Make a secondary interface the instance's primary interface. + +If applied to a secondary interface, that interface will become the primary on the next reboot of the instance. Note that this may have implications for routing between instances, as the new primary interface will be on a distinct subnet from the previous primary interface. + +Note that this can only be used to select a new primary interface for an instance. Requests to change the primary interface into a secondary will return an error. */ + primary?: boolean; +}; + /** * A single page of results */ @@ -770,9 +791,7 @@ export type IpPool = { }; /** - * Create-time parameters for an IP Pool. - * - * See {@link IpPool} + * Create-time parameters for an `IpPool` */ export type IpPoolCreate = { description: string; name: Name }; @@ -826,13 +845,6 @@ export type IpPoolUpdate = { description?: string; name?: Name }; */ export type L4PortRange = string; -/** - * A MAC address - * - * A Media Access Control address, in EUI-48 format - */ -export type MacAddr = string; - /** * A `Measurement` is a timestamped datum from a single metric */ @@ -848,67 +860,6 @@ export type MeasurementResultsPage = { nextPage?: string; }; -/** - * A `NetworkInterface` represents a virtual network interface device. - */ -export type NetworkInterface = { - /** human-readable free-form text about a resource */ - description: string; - /** unique, immutable, system-controlled identifier for each resource */ - id: string; - /** The Instance to which the interface belongs. */ - instanceId: string; - /** The IP address assigned to this interface. */ - ip: string; - /** The MAC address assigned to this interface. */ - mac: MacAddr; - /** unique, mutable, user-controlled identifier for each resource */ - name: Name; - /** True if this interface is the primary for the instance to which it's attached. */ - primary: boolean; - /** The subnet to which the interface belongs. */ - subnetId: string; - /** timestamp when this resource was created */ - timeCreated: Date; - /** timestamp when this resource was last modified */ - timeModified: Date; - /** The VPC to which the interface belongs. */ - vpcId: string; -}; - -/** - * A single page of results - */ -export type NetworkInterfaceResultsPage = { - /** list of items on this page of results */ - items: NetworkInterface[]; - /** token used to fetch the next page of results (if any) */ - nextPage?: string; -}; - -/** - * Parameters for updating a {@link NetworkInterface}. - * - * Note that modifying IP addresses for an interface is not yet supported, a new interface must be created instead. - */ -export type NetworkInterfaceUpdate = { - description?: string; - name?: Name; - /** Make a secondary interface the instance's primary interface. - -If applied to a secondary interface, that interface will become the primary on the next reboot of the instance. Note that this may have implications for routing between instances, as the new primary interface will be on a distinct subnet from the previous primary interface. - -Note that this can only be used to select a new primary interface for an instance. Requests to change the primary interface into a secondary will return an error. */ - primary?: boolean; -}; - -/** - * Unique name for a saga `Node` - * - * Each node requires a string name that's unique within its DAG. The name is used to identify its output. Nodes that depend on a given node (either directly or indirectly) can access the node's output using its name. - */ -export type NodeName = string; - /** * A password used to authenticate a user * @@ -919,7 +870,9 @@ export type Password = string; export type PhysicalDiskType = "internal" | "external"; /** - * Client view of a {@link PhysicalDisk} + * View of a Physical Disk + * + * Physical disks reside in a particular sled and are used to store both Instance Disk data as well as internal metadata. */ export type PhysicalDisk = { diskType: PhysicalDiskType; @@ -947,7 +900,7 @@ export type PhysicalDiskResultsPage = { }; /** - * Client view of a {@link Project} + * View of a Project */ export type Project = { /** human-readable free-form text about a resource */ @@ -963,7 +916,7 @@ export type Project = { }; /** - * Create-time parameters for a {@link Project} + * Create-time parameters for a `Project` */ export type ProjectCreate = { description: string; name: Name }; @@ -991,7 +944,7 @@ export type ProjectRoleRoleAssignment = { }; /** - * Client view of a `Policy`, which describes how this resource may be accessed + * Policy for a particular resource * * Note that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource. */ @@ -1001,12 +954,12 @@ export type ProjectRolePolicy = { }; /** - * Updateable properties of a {@link Project} + * Updateable properties of a `Project` */ export type ProjectUpdate = { description?: string; name?: Name }; /** - * Client view of an {@link Rack} + * View of an Rack */ export type Rack = { /** unique, immutable, system-controlled identifier for each resource */ @@ -1035,7 +988,7 @@ export type RackResultsPage = { export type RoleName = string; /** - * Client view of a {@link Role} + * View of a Role */ export type Role = { description: string; name: RoleName }; @@ -1052,7 +1005,7 @@ export type RoleResultsPage = { /** * A `RouteDestination` is used to match traffic with a routing rule, on the destination of that traffic. * - * When traffic is to be sent to a destination that is within a given `RouteDestination`, the corresponding {@link RouterRoute} applies, and traffic will be forward to the {@link RouteTarget} for that rule. + * When traffic is to be sent to a destination that is within a given `RouteDestination`, the corresponding `RouterRoute` applies, and traffic will be forward to the `RouteTarget` for that rule. */ export type RouteDestination = /** Route applies to traffic destined for a specific IP address */ @@ -1080,9 +1033,9 @@ export type RouteTarget = | { type: "internet_gateway"; value: Name }; /** - * The classification of a {@link RouterRoute} as defined by the system. The kind determines certain attributes such as if the route is modifiable and describes how or where the route was created. + * The kind of a `RouterRoute` * - * See [RFD-21](https://rfd.shared.oxide.computer/rfd/0021#concept-router) for more context + * The kind determines certain attributes such as if the route is modifiable and describes how or where the route was created. */ export type RouterRouteKind = /** Determines the default destination of traffic, such as whether it goes to the internet or not. @@ -1097,7 +1050,7 @@ export type RouterRouteKind = `Destination: A different VPC` `Modifiable: false` */ | "vpc_peering" - /** Created by a user See [`RouteTarget`] + /** Created by a user; see `RouteTarget` `Destination: User defined` `Modifiable: true` */ | "custom"; @@ -1120,12 +1073,12 @@ export type RouterRoute = { timeCreated: Date; /** timestamp when this resource was last modified */ timeModified: Date; - /** The VPC Router to which the route belongs. */ + /** The ID of the VPC Router to which the route belongs */ vpcRouterId: string; }; /** - * Create-time parameters for a `omicron_common::api::external::RouterRoute` + * Create-time parameters for a `RouterRoute` */ export type RouterRouteCreate = { description: string; @@ -1145,7 +1098,7 @@ export type RouterRouteResultsPage = { }; /** - * Updateable properties of a `omicron_common::api::external::RouterRoute` + * Updateable properties of a `RouterRoute` */ export type RouterRouteUpdate = { description?: string; @@ -1154,30 +1107,6 @@ export type RouterRouteUpdate = { target: RouteTarget; }; -export type SagaErrorInfo = - | { error: "action_failed"; sourceError: Record } - | { error: "deserialize_failed"; message: string } - | { error: "injected_error" } - | { error: "serialize_failed"; message: string } - | { error: "subsaga_create_failed"; message: string }; - -export type SagaState = - | { state: "running" } - | { state: "succeeded" } - | { errorInfo: SagaErrorInfo; errorNodeName: NodeName; state: "failed" }; - -export type Saga = { id: string; state: SagaState }; - -/** - * A single page of results - */ -export type SagaResultsPage = { - /** list of items on this page of results */ - items: Saga[]; - /** token used to fetch the next page of results (if any) */ - nextPage?: string; -}; - /** * Identity-related metadata that's included in nearly all public API objects */ @@ -1220,7 +1149,7 @@ export type SamlIdentityProviderCreate = { /** the source of an identity provider metadata descriptor */ idpMetadataSource: IdpMetadataSource; name: Name; - /** optional request signing key pair */ + /** request signing key pair */ signingKeypair?: DerEncodedKeyPair; /** service provider endpoint where the idp should send log out requests */ sloUrl: string; @@ -1240,7 +1169,9 @@ export type SiloIdentityMode = | "local_only"; /** - * Client view of a ['Silo'] + * View of a Silo + * + * A Silo is the highest level unit of isolation. */ export type Silo = { /** human-readable free-form text about a resource */ @@ -1260,12 +1191,12 @@ export type Silo = { }; /** - * Create-time parameters for a {@link Silo} + * Create-time parameters for a `Silo` */ export type SiloCreate = { /** If set, this group will be created during Silo creation and granted the "Silo Admin" role. Identity providers can assert that users belong to this group and those users can log in and further initialize the Silo. -Note that if configuring a SAML based identity provider, group_attribute_name must be set for users to be considered part of a group. See [`SamlIdentityProviderCreate`] for more information. */ +Note that if configuring a SAML based identity provider, group_attribute_name must be set for users to be considered part of a group. See `SamlIdentityProviderCreate` for more information. */ adminGroupName?: string; description: string; discoverable: boolean; @@ -1297,7 +1228,7 @@ export type SiloRoleRoleAssignment = { }; /** - * Client view of a `Policy`, which describes how this resource may be accessed + * Policy for a particular resource * * Note that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource. */ @@ -1338,7 +1269,7 @@ export type SledResultsPage = { export type SnapshotState = "creating" | "ready" | "faulted" | "destroyed"; /** - * Client view of a Snapshot + * View of a Snapshot */ export type Snapshot = { /** human-readable free-form text about a resource */ @@ -1358,7 +1289,7 @@ export type Snapshot = { }; /** - * Create-time parameters for a {@link Snapshot} + * Create-time parameters for a `Snapshot` */ export type SnapshotCreate = { description: string; @@ -1380,7 +1311,7 @@ export type SnapshotResultsPage = { export type SpoofLoginBody = { username: string }; /** - * Client view of a {@link SshKey} + * View of an SSH Key */ export type SshKey = { /** human-readable free-form text about a resource */ @@ -1400,7 +1331,7 @@ export type SshKey = { }; /** - * Create-time parameters for an {@link SshKey} + * Create-time parameters for an `SshKey` */ export type SshKeyCreate = { description: string; @@ -1505,7 +1436,7 @@ export type UpdateableComponentResultsPage = { }; /** - * Client view of a {@link User} + * View of a User */ export type User = { /** Human-readable name that can identify the user */ @@ -1516,7 +1447,9 @@ export type User = { }; /** - * Client view of a {@link UserBuiltin} + * View of a Built-in User + * + * A Built-in User is explicitly created as opposed to being derived from an Identify Provider. */ export type UserBuiltin = { /** human-readable free-form text about a resource */ @@ -1558,7 +1491,7 @@ export type UserPassword = | { userPasswordValue: "invalid_password" }; /** - * Create-time parameters for a {@link User} + * Create-time parameters for a `User` */ export type UserCreate = { /** username used to log in */ @@ -1586,7 +1519,7 @@ export type UsernamePasswordCredentials = { }; /** - * Client view of a {@link Vpc} + * View of a VPC */ export type Vpc = { /** human-readable free-form text about a resource */ @@ -1610,14 +1543,14 @@ export type Vpc = { }; /** - * Create-time parameters for a {@link Vpc} + * Create-time parameters for a `Vpc` */ export type VpcCreate = { description: string; dnsName: Name; - /** The IPv6 prefix for this VPC. + /** The IPv6 prefix for this VPC -All IPv6 subnets created from this VPC must be taken from this range, which sould be a Unique Local Address in the range `fd00::/48`. The default VPC Subnet will have the first `/64` range from this prefix. */ +All IPv6 subnets created from this VPC must be taken from this range, which should be a Unique Local Address in the range `fd00::/48`. The default VPC Subnet will have the first `/64` range from this prefix. */ ipv6Prefix?: Ipv6Net; name: Name; }; @@ -1661,7 +1594,7 @@ export type VpcFirewallRuleFilter = { export type VpcFirewallRuleStatus = "disabled" | "enabled"; /** - * A `VpcFirewallRuleTarget` is used to specify the set of {@link Instance}s to which a firewall rule applies. + * A `VpcFirewallRuleTarget` is used to specify the set of `Instance`s to which a firewall rule applies. */ export type VpcFirewallRuleTarget = /** The rule applies to all instances in the VPC */ @@ -1769,7 +1702,7 @@ export type VpcRouter = { }; /** - * Create-time parameters for a {@link VpcRouter} + * Create-time parameters for a `VpcRouter` */ export type VpcRouterCreate = { description: string; name: Name }; @@ -1784,7 +1717,7 @@ export type VpcRouterResultsPage = { }; /** - * Updateable properties of a {@link VpcRouter} + * Updateable properties of a `VpcRouter` */ export type VpcRouterUpdate = { description?: string; name?: Name }; @@ -1811,7 +1744,7 @@ export type VpcSubnet = { }; /** - * Create-time parameters for a {@link VpcSubnet} + * Create-time parameters for a `VpcSubnet` */ export type VpcSubnetCreate = { description: string; @@ -1837,22 +1770,15 @@ export type VpcSubnetResultsPage = { }; /** - * Updateable properties of a {@link VpcSubnet} + * Updateable properties of a `VpcSubnet` */ export type VpcSubnetUpdate = { description?: string; name?: Name }; /** - * Updateable properties of a {@link Vpc} + * Updateable properties of a `Vpc` */ export type VpcUpdate = { description?: string; dnsName?: Name; name?: Name }; -/** - * Supported set of sort modes for scanning by name only - * - * Currently, we only support scanning in ascending order. - */ -export type NameSortMode = "name_ascending"; - /** * Supported set of sort modes for scanning by name or id */ @@ -1884,6 +1810,13 @@ export type SystemMetricName = | "cpus_provisioned" | "ram_provisioned"; +/** + * Supported set of sort modes for scanning by name only + * + * Currently, we only support scanning in ascending order. + */ +export type NameSortMode = "name_ascending"; + export interface LoginLocalPathParams { siloName: Name; } @@ -1898,24 +1831,6 @@ export interface LoginSamlPathParams { siloName: Name; } -export interface SystemImageViewByIdPathParams { - id: string; -} - -export interface SystemImageListQueryParams { - limit?: number; - pageToken?: string; - sortBy?: NameSortMode; -} - -export interface SystemImageViewPathParams { - imageName: Name; -} - -export interface SystemImageDeletePathParams { - imageName: Name; -} - export interface DiskListQueryParams { limit?: number; pageToken?: string; @@ -1943,6 +1858,46 @@ export interface DiskDeleteQueryParams { project?: NameOrId; } +export interface DiskBulkWriteImportPathParams { + disk: NameOrId; +} + +export interface DiskBulkWriteImportQueryParams { + project?: NameOrId; +} + +export interface DiskBulkWriteImportStartPathParams { + disk: NameOrId; +} + +export interface DiskBulkWriteImportStartQueryParams { + project?: NameOrId; +} + +export interface DiskBulkWriteImportStopPathParams { + disk: NameOrId; +} + +export interface DiskBulkWriteImportStopQueryParams { + project?: NameOrId; +} + +export interface DiskFinalizeImportPathParams { + disk: NameOrId; +} + +export interface DiskFinalizeImportQueryParams { + project?: NameOrId; +} + +export interface DiskImportBlocksFromUrlPathParams { + disk: NameOrId; +} + +export interface DiskImportBlocksFromUrlQueryParams { + project?: NameOrId; +} + export interface DiskMetricsListPathParams { disk: NameOrId; metric: DiskMetricName; @@ -1967,6 +1922,7 @@ export interface GroupViewPathParams { } export interface ImageListQueryParams { + includeSiloImages?: boolean; limit?: number; pageToken?: string; project?: NameOrId; @@ -1993,6 +1949,14 @@ export interface ImageDeleteQueryParams { project?: NameOrId; } +export interface ImagePromotePathParams { + image: NameOrId; +} + +export interface ImagePromoteQueryParams { + project?: NameOrId; +} + export interface InstanceListQueryParams { limit?: number; pageToken?: string; @@ -2087,6 +2051,9 @@ export interface InstanceSerialConsoleStreamPathParams { } export interface InstanceSerialConsoleStreamQueryParams { + fromStart?: number; + maxBytes?: number; + mostRecent?: number; project?: NameOrId; } @@ -2369,16 +2336,6 @@ export interface RoleViewPathParams { roleName: string; } -export interface SagaListQueryParams { - limit?: number; - pageToken?: string; - sortBy?: IdSortMode; -} - -export interface SagaViewPathParams { - sagaId: string; -} - export interface SiloListQueryParams { limit?: number; pageToken?: string; @@ -2645,14 +2602,8 @@ export interface VpcDeleteQueryParams { project?: NameOrId; } -export type ApiViewByIdMethods = Pick< - InstanceType["methods"], - "systemImageViewById" ->; - export type ApiListMethods = Pick< InstanceType["methods"], - | "systemImageList" | "diskList" | "diskMetricsList" | "groupList" @@ -2674,7 +2625,6 @@ export type ApiListMethods = Pick< | "ipPoolRangeList" | "ipPoolServiceRangeList" | "roleList" - | "sagaList" | "siloList" | "systemComponentVersionList" | "updateDeploymentsList" @@ -2738,7 +2688,7 @@ export class Api extends HttpClient { }); }, /** - * Authenticate a user (i.e., log in) via username and password + * Authenticate a user via username and password */ loginLocal: ( { @@ -2768,7 +2718,7 @@ export class Api extends HttpClient { }); }, /** - * Authenticate a user (i.e., log in) via SAML + * Authenticate a user via SAML */ loginSaml: ( { path }: { path: LoginSamlPathParams }, @@ -2788,131 +2738,173 @@ export class Api extends HttpClient { }); }, /** - * Fetch a system-wide image by id + * List disks */ - systemImageViewById: ( - { path }: { path: SystemImageViewByIdPathParams }, + diskList: ( + { query = {} }: { query?: DiskListQueryParams }, params: RequestParams = {} ) => { - return this.request({ - path: `/system/by-id/images/${path.id}`, + return this.request({ + path: `/v1/disks`, method: "GET", + query, ...params, }); }, /** - * List system-wide images + * Create a disk */ - systemImageList: ( - { query = {} }: { query?: SystemImageListQueryParams }, + diskCreate: ( + { query = {}, body }: { query?: DiskCreateQueryParams; body: DiskCreate }, params: RequestParams = {} ) => { - return this.request({ - path: `/system/images`, - method: "GET", + return this.request({ + path: `/v1/disks`, + method: "POST", + body, query, ...params, }); }, /** - * Create a system-wide image + * Fetch a disk */ - systemImageCreate: ( - { body }: { body: GlobalImageCreate }, + diskView: ( + { + path, + query = {}, + }: { path: DiskViewPathParams; query?: DiskViewQueryParams }, params: RequestParams = {} ) => { - return this.request({ - path: `/system/images`, - method: "POST", - body, + return this.request({ + path: `/v1/disks/${path.disk}`, + method: "GET", + query, ...params, }); }, /** - * Fetch a system-wide image + * Delete a disk */ - systemImageView: ( - { path }: { path: SystemImageViewPathParams }, + diskDelete: ( + { + path, + query = {}, + }: { path: DiskDeletePathParams; query?: DiskDeleteQueryParams }, params: RequestParams = {} ) => { - return this.request({ - path: `/system/images/${path.imageName}`, - method: "GET", + return this.request({ + path: `/v1/disks/${path.disk}`, + method: "DELETE", + query, ...params, }); }, /** - * Delete a system-wide image + * Import blocks into a disk */ - systemImageDelete: ( - { path }: { path: SystemImageDeletePathParams }, + diskBulkWriteImport: ( + { + path, + query = {}, + body, + }: { + path: DiskBulkWriteImportPathParams; + query?: DiskBulkWriteImportQueryParams; + body: ImportBlocksBulkWrite; + }, params: RequestParams = {} ) => { return this.request({ - path: `/system/images/${path.imageName}`, - method: "DELETE", + path: `/v1/disks/${path.disk}/bulk-write`, + method: "POST", + body, + query, ...params, }); }, /** - * List disks + * Start importing blocks into a disk */ - diskList: ( - { query = {} }: { query?: DiskListQueryParams }, + diskBulkWriteImportStart: ( + { + path, + query = {}, + }: { + path: DiskBulkWriteImportStartPathParams; + query?: DiskBulkWriteImportStartQueryParams; + }, params: RequestParams = {} ) => { - return this.request({ - path: `/v1/disks`, - method: "GET", + return this.request({ + path: `/v1/disks/${path.disk}/bulk-write-start`, + method: "POST", query, ...params, }); }, /** - * Create a disk + * Stop importing blocks into a disk */ - diskCreate: ( - { query = {}, body }: { query?: DiskCreateQueryParams; body: DiskCreate }, + diskBulkWriteImportStop: ( + { + path, + query = {}, + }: { + path: DiskBulkWriteImportStopPathParams; + query?: DiskBulkWriteImportStopQueryParams; + }, params: RequestParams = {} ) => { - return this.request({ - path: `/v1/disks`, + return this.request({ + path: `/v1/disks/${path.disk}/bulk-write-stop`, method: "POST", - body, query, ...params, }); }, /** - * Fetch a disk + * Confirm disk block import completion */ - diskView: ( + diskFinalizeImport: ( { path, query = {}, - }: { path: DiskViewPathParams; query?: DiskViewQueryParams }, + body, + }: { + path: DiskFinalizeImportPathParams; + query?: DiskFinalizeImportQueryParams; + body: FinalizeDisk; + }, params: RequestParams = {} ) => { - return this.request({ - path: `/v1/disks/${path.disk}`, - method: "GET", + return this.request({ + path: `/v1/disks/${path.disk}/finalize`, + method: "POST", + body, query, ...params, }); }, /** - * Delete a disk + * Request to import blocks from URL */ - diskDelete: ( + diskImportBlocksFromUrl: ( { path, query = {}, - }: { path: DiskDeletePathParams; query?: DiskDeleteQueryParams }, + body, + }: { + path: DiskImportBlocksFromUrlPathParams; + query?: DiskImportBlocksFromUrlQueryParams; + body: ImportBlocksFromUrl; + }, params: RequestParams = {} ) => { return this.request({ - path: `/v1/disks/${path.disk}`, - method: "DELETE", + path: `/v1/disks/${path.disk}/import`, + method: "POST", + body, query, ...params, }); @@ -3030,6 +3022,23 @@ export class Api extends HttpClient { ...params, }); }, + /** + * Promote a project image + */ + imagePromote: ( + { + path, + query = {}, + }: { path: ImagePromotePathParams; query?: ImagePromoteQueryParams }, + params: RequestParams = {} + ) => { + return this.request({ + path: `/v1/images/${path.image}/promote`, + method: "POST", + query, + ...params, + }); + }, /** * List instances */ @@ -3280,7 +3289,7 @@ export class Api extends HttpClient { * Fetch the user associated with the current session */ currentUserView: (_: EmptyObj, params: RequestParams = {}) => { - return this.request({ + return this.request({ path: `/v1/me`, method: "GET", ...params, @@ -3361,7 +3370,7 @@ export class Api extends HttpClient { { query = {} }: { query?: InstanceNetworkInterfaceListQueryParams }, params: RequestParams = {} ) => { - return this.request({ + return this.request({ path: `/v1/network-interfaces`, method: "GET", query, @@ -3377,11 +3386,11 @@ export class Api extends HttpClient { body, }: { query?: InstanceNetworkInterfaceCreateQueryParams; - body: NetworkInterfaceCreate; + body: InstanceNetworkInterfaceCreate; }, params: RequestParams = {} ) => { - return this.request({ + return this.request({ path: `/v1/network-interfaces`, method: "POST", body, @@ -3402,7 +3411,7 @@ export class Api extends HttpClient { }, params: RequestParams = {} ) => { - return this.request({ + return this.request({ path: `/v1/network-interfaces/${path.interface}`, method: "GET", query, @@ -3420,11 +3429,11 @@ export class Api extends HttpClient { }: { path: InstanceNetworkInterfaceUpdatePathParams; query?: InstanceNetworkInterfaceUpdateQueryParams; - body: NetworkInterfaceUpdate; + body: InstanceNetworkInterfaceUpdate; }, params: RequestParams = {} ) => { - return this.request({ + return this.request({ path: `/v1/network-interfaces/${path.interface}`, method: "PUT", body, @@ -3655,7 +3664,7 @@ export class Api extends HttpClient { }); }, /** - * Create a new system-wide x.509 certificate. + * Create a new system-wide x.509 certificate */ certificateCreate: ( { body }: { body: CertificateCreate }, @@ -3783,7 +3792,7 @@ export class Api extends HttpClient { }); }, /** - * List a silo's IDPs_name + * List a silo's IdP's name */ siloIdentityProviderList: ( { query = {} }: { query?: SiloIdentityProviderListQueryParams }, @@ -3858,7 +3867,7 @@ export class Api extends HttpClient { }); }, /** - * Create a SAML IDP + * Create a SAML IdP */ samlIdentityProviderCreate: ( { @@ -3879,7 +3888,7 @@ export class Api extends HttpClient { }); }, /** - * Fetch a SAML IDP + * Fetch a SAML IdP */ samlIdentityProviderView: ( { @@ -4015,7 +4024,7 @@ export class Api extends HttpClient { }); }, /** - * Fetch the IP pool used for Oxide services. + * Fetch the IP pool used for Oxide services */ ipPoolServiceView: (_: EmptyObj, params: RequestParams = {}) => { return this.request({ @@ -4025,7 +4034,7 @@ export class Api extends HttpClient { }); }, /** - * List ranges for the IP pool used for Oxide services. + * List ranges for the IP pool used for Oxide services */ ipPoolServiceRangeList: ( { query = {} }: { query?: IpPoolServiceRangeListQueryParams }, @@ -4039,7 +4048,7 @@ export class Api extends HttpClient { }); }, /** - * Add a range to an IP pool used for Oxide services. + * Add a range to an IP pool used for Oxide services */ ipPoolServiceRangeAdd: ( { body }: { body: IpRange }, @@ -4053,7 +4062,7 @@ export class Api extends HttpClient { }); }, /** - * Remove a range from an IP pool used for Oxide services. + * Remove a range from an IP pool used for Oxide services */ ipPoolServiceRangeRemove: ( { body }: { body: IpRange }, @@ -4134,33 +4143,6 @@ export class Api extends HttpClient { ...params, }); }, - /** - * List sagas - */ - sagaList: ( - { query = {} }: { query?: SagaListQueryParams }, - params: RequestParams = {} - ) => { - return this.request({ - path: `/v1/system/sagas`, - method: "GET", - query, - ...params, - }); - }, - /** - * Fetch a saga - */ - sagaView: ( - { path }: { path: SagaViewPathParams }, - params: RequestParams = {} - ) => { - return this.request({ - path: `/v1/system/sagas/${path.sagaId}`, - method: "GET", - ...params, - }); - }, /** * List silos */ @@ -4605,7 +4587,7 @@ export class Api extends HttpClient { }); }, /** - * Get a router + * Fetch a router */ vpcRouterView: ( { @@ -4665,7 +4647,7 @@ export class Api extends HttpClient { }); }, /** - * Fetch a subnet + * List subnets */ vpcSubnetList: ( { query = {} }: { query?: VpcSubnetListQueryParams }, @@ -4769,7 +4751,7 @@ export class Api extends HttpClient { }, params: RequestParams = {} ) => { - return this.request({ + return this.request({ path: `/v1/vpc-subnets/${path.subnet}/network-interfaces`, method: "GET", query, diff --git a/client/msw-handlers.ts b/client/msw-handlers.ts index 810a469..e03923d 100644 --- a/client/msw-handlers.ts +++ b/client/msw-handlers.ts @@ -78,26 +78,6 @@ export interface MSWHandlers { loginSaml: (params: { path: Api.LoginSamlPathParams }) => StatusCode; /** `POST /logout` */ logout: () => StatusCode; - /** `GET /system/by-id/images/:id` */ - systemImageViewById: (params: { - path: Api.SystemImageViewByIdPathParams; - }) => HandlerResult; - /** `GET /system/images` */ - systemImageList: (params: { - query: Api.SystemImageListQueryParams; - }) => HandlerResult; - /** `POST /system/images` */ - systemImageCreate: (params: { - body: Json; - }) => HandlerResult; - /** `GET /system/images/:imageName` */ - systemImageView: (params: { - path: Api.SystemImageViewPathParams; - }) => HandlerResult; - /** `DELETE /system/images/:imageName` */ - systemImageDelete: (params: { - path: Api.SystemImageDeletePathParams; - }) => StatusCode; /** `GET /v1/disks` */ diskList: (params: { query: Api.DiskListQueryParams; @@ -117,6 +97,34 @@ export interface MSWHandlers { path: Api.DiskDeletePathParams; query: Api.DiskDeleteQueryParams; }) => StatusCode; + /** `POST /v1/disks/:disk/bulk-write` */ + diskBulkWriteImport: (params: { + path: Api.DiskBulkWriteImportPathParams; + query: Api.DiskBulkWriteImportQueryParams; + body: Json; + }) => StatusCode; + /** `POST /v1/disks/:disk/bulk-write-start` */ + diskBulkWriteImportStart: (params: { + path: Api.DiskBulkWriteImportStartPathParams; + query: Api.DiskBulkWriteImportStartQueryParams; + }) => StatusCode; + /** `POST /v1/disks/:disk/bulk-write-stop` */ + diskBulkWriteImportStop: (params: { + path: Api.DiskBulkWriteImportStopPathParams; + query: Api.DiskBulkWriteImportStopQueryParams; + }) => StatusCode; + /** `POST /v1/disks/:disk/finalize` */ + diskFinalizeImport: (params: { + path: Api.DiskFinalizeImportPathParams; + query: Api.DiskFinalizeImportQueryParams; + body: Json; + }) => StatusCode; + /** `POST /v1/disks/:disk/import` */ + diskImportBlocksFromUrl: (params: { + path: Api.DiskImportBlocksFromUrlPathParams; + query: Api.DiskImportBlocksFromUrlQueryParams; + body: Json; + }) => StatusCode; /** `GET /v1/disks/:disk/metrics/:metric` */ diskMetricsList: (params: { path: Api.DiskMetricsListPathParams; @@ -149,6 +157,11 @@ export interface MSWHandlers { path: Api.ImageDeletePathParams; query: Api.ImageDeleteQueryParams; }) => StatusCode; + /** `POST /v1/images/:image/promote` */ + imagePromote: (params: { + path: Api.ImagePromotePathParams; + query: Api.ImagePromoteQueryParams; + }) => HandlerResult; /** `GET /v1/instances` */ instanceList: (params: { query: Api.InstanceListQueryParams; @@ -222,7 +235,7 @@ export interface MSWHandlers { query: Api.InstanceStopQueryParams; }) => HandlerResult; /** `GET /v1/me` */ - currentUserView: () => HandlerResult; + currentUserView: () => HandlerResult; /** `GET /v1/me/groups` */ currentUserGroups: (params: { query: Api.CurrentUserGroupsQueryParams; @@ -246,23 +259,23 @@ export interface MSWHandlers { /** `GET /v1/network-interfaces` */ instanceNetworkInterfaceList: (params: { query: Api.InstanceNetworkInterfaceListQueryParams; - }) => HandlerResult; + }) => HandlerResult; /** `POST /v1/network-interfaces` */ instanceNetworkInterfaceCreate: (params: { query: Api.InstanceNetworkInterfaceCreateQueryParams; - body: Json; - }) => HandlerResult; + body: Json; + }) => HandlerResult; /** `GET /v1/network-interfaces/:interface` */ instanceNetworkInterfaceView: (params: { path: Api.InstanceNetworkInterfaceViewPathParams; query: Api.InstanceNetworkInterfaceViewQueryParams; - }) => HandlerResult; + }) => HandlerResult; /** `PUT /v1/network-interfaces/:interface` */ instanceNetworkInterfaceUpdate: (params: { path: Api.InstanceNetworkInterfaceUpdatePathParams; query: Api.InstanceNetworkInterfaceUpdateQueryParams; - body: Json; - }) => HandlerResult; + body: Json; + }) => HandlerResult; /** `DELETE /v1/network-interfaces/:interface` */ instanceNetworkInterfaceDelete: (params: { path: Api.InstanceNetworkInterfaceDeletePathParams; @@ -457,14 +470,6 @@ export interface MSWHandlers { roleView: (params: { path: Api.RoleViewPathParams; }) => HandlerResult; - /** `GET /v1/system/sagas` */ - sagaList: (params: { - query: Api.SagaListQueryParams; - }) => HandlerResult; - /** `GET /v1/system/sagas/:sagaId` */ - sagaView: (params: { - path: Api.SagaViewPathParams; - }) => HandlerResult; /** `GET /v1/system/silos` */ siloList: (params: { query: Api.SiloListQueryParams; @@ -631,7 +636,7 @@ export interface MSWHandlers { vpcSubnetListNetworkInterfaces: (params: { path: Api.VpcSubnetListNetworkInterfacesPathParams; query: Api.VpcSubnetListNetworkInterfacesQueryParams; - }) => HandlerResult; + }) => HandlerResult; /** `GET /v1/vpcs` */ vpcList: (params: { query: Api.VpcListQueryParams; @@ -774,34 +779,6 @@ export function makeHandlers(handlers: MSWHandlers): RestHandler[] { handler(handlers["loginSaml"], schema.LoginSamlParams, null) ), rest.post("/logout", handler(handlers["logout"], null, null)), - rest.get( - "/system/by-id/images/:id", - handler( - handlers["systemImageViewById"], - schema.SystemImageViewByIdParams, - null - ) - ), - rest.get( - "/system/images", - handler(handlers["systemImageList"], schema.SystemImageListParams, null) - ), - rest.post( - "/system/images", - handler(handlers["systemImageCreate"], null, schema.GlobalImageCreate) - ), - rest.get( - "/system/images/:imageName", - handler(handlers["systemImageView"], schema.SystemImageViewParams, null) - ), - rest.delete( - "/system/images/:imageName", - handler( - handlers["systemImageDelete"], - schema.SystemImageDeleteParams, - null - ) - ), rest.get( "/v1/disks", handler(handlers["diskList"], schema.DiskListParams, null) @@ -822,6 +799,46 @@ export function makeHandlers(handlers: MSWHandlers): RestHandler[] { "/v1/disks/:disk", handler(handlers["diskDelete"], schema.DiskDeleteParams, null) ), + rest.post( + "/v1/disks/:disk/bulk-write", + handler( + handlers["diskBulkWriteImport"], + schema.DiskBulkWriteImportParams, + schema.ImportBlocksBulkWrite + ) + ), + rest.post( + "/v1/disks/:disk/bulk-write-start", + handler( + handlers["diskBulkWriteImportStart"], + schema.DiskBulkWriteImportStartParams, + null + ) + ), + rest.post( + "/v1/disks/:disk/bulk-write-stop", + handler( + handlers["diskBulkWriteImportStop"], + schema.DiskBulkWriteImportStopParams, + null + ) + ), + rest.post( + "/v1/disks/:disk/finalize", + handler( + handlers["diskFinalizeImport"], + schema.DiskFinalizeImportParams, + schema.FinalizeDisk + ) + ), + rest.post( + "/v1/disks/:disk/import", + handler( + handlers["diskImportBlocksFromUrl"], + schema.DiskImportBlocksFromUrlParams, + schema.ImportBlocksFromUrl + ) + ), rest.get( "/v1/disks/:disk/metrics/:metric", handler(handlers["diskMetricsList"], schema.DiskMetricsListParams, null) @@ -854,6 +871,10 @@ export function makeHandlers(handlers: MSWHandlers): RestHandler[] { "/v1/images/:image", handler(handlers["imageDelete"], schema.ImageDeleteParams, null) ), + rest.post( + "/v1/images/:image/promote", + handler(handlers["imagePromote"], schema.ImagePromoteParams, null) + ), rest.get( "/v1/instances", handler(handlers["instanceList"], schema.InstanceListParams, null) @@ -988,7 +1009,7 @@ export function makeHandlers(handlers: MSWHandlers): RestHandler[] { handler( handlers["instanceNetworkInterfaceCreate"], schema.InstanceNetworkInterfaceCreateParams, - schema.NetworkInterfaceCreate + schema.InstanceNetworkInterfaceCreate ) ), rest.get( @@ -1004,7 +1025,7 @@ export function makeHandlers(handlers: MSWHandlers): RestHandler[] { handler( handlers["instanceNetworkInterfaceUpdate"], schema.InstanceNetworkInterfaceUpdateParams, - schema.NetworkInterfaceUpdate + schema.InstanceNetworkInterfaceUpdate ) ), rest.delete( @@ -1260,14 +1281,6 @@ export function makeHandlers(handlers: MSWHandlers): RestHandler[] { "/v1/system/roles/:roleName", handler(handlers["roleView"], schema.RoleViewParams, null) ), - rest.get( - "/v1/system/sagas", - handler(handlers["sagaList"], schema.SagaListParams, null) - ), - rest.get( - "/v1/system/sagas/:sagaId", - handler(handlers["sagaView"], schema.SagaViewParams, null) - ), rest.get( "/v1/system/silos", handler(handlers["siloList"], schema.SiloListParams, null) diff --git a/client/type-test.ts b/client/type-test.ts index 84ba392..9193112 100644 --- a/client/type-test.ts +++ b/client/type-test.ts @@ -32,6 +32,7 @@ assert< >(); assert>>(); assert>>(); +assert>>(); assert>>(); assert>>(); assert>>(); @@ -49,25 +50,20 @@ assert>>(); assert>>(); assert>>(); assert>>(); -assert>>(); +assert>>(); assert>>(); assert>>(); assert>>(); assert< Equals> >(); +assert>>(); assert>>(); assert>>(); assert< Equals> >(); assert>>(); -assert>>(); -assert>>(); -assert>>(); -assert< - Equals> ->(); assert>>(); assert>>(); assert< @@ -82,8 +78,13 @@ assert< >(); assert>>(); assert>>(); +assert>>(); assert>>(); assert>>(); +assert< + Equals> +>(); +assert>>(); assert>>(); assert>>(); assert>>(); @@ -91,7 +92,10 @@ assert< Equals> >(); assert< - Equals> + Equals< + A.InstanceNetworkInterfaceCreate, + z.infer + > >(); assert< Equals< @@ -101,6 +105,22 @@ assert< >(); assert>>(); assert>>(); +assert>>(); +assert< + Equals> +>(); +assert< + Equals< + A.InstanceNetworkInterfaceResultsPage, + z.infer + > +>(); +assert< + Equals< + A.InstanceNetworkInterfaceUpdate, + z.infer + > +>(); assert>>(); assert< Equals< @@ -116,29 +136,21 @@ assert>>(); assert>>(); assert>>(); assert>>(); -assert>>(); assert< + // @ts-expect-error + Equals> +>(); +assert< + // @ts-expect-error Equals> >(); assert>>(); assert>>(); assert>>(); -assert>>(); assert>>(); assert< Equals> >(); -assert>>(); -assert< - Equals< - A.NetworkInterfaceResultsPage, - z.infer - > ->(); -assert< - Equals> ->(); -assert>>(); assert>>(); assert>>(); assert>>(); @@ -171,10 +183,6 @@ assert< Equals> >(); assert>>(); -assert>>(); -assert>>(); -assert>>(); -assert>>(); assert< Equals> >(); @@ -292,8 +300,8 @@ assert< >(); assert>>(); assert>>(); -assert>>(); assert>>(); assert>>(); assert>>(); assert>>(); +assert>>(); diff --git a/client/validate.ts b/client/validate.ts index 02b62e5..30afd32 100644 --- a/client/validate.ts +++ b/client/validate.ts @@ -2,11 +2,6 @@ import { z, ZodType } from "zod"; import { snakeify, processResponseBody } from "./util"; -const DateType = z.preprocess((arg) => { - if (typeof arg == "string" || arg instanceof Date) return new Date(arg); -}, z.date()); -type DateType = z.infer; - /** * Zod only supports string enums at the moment. A previous issue was opened * and closed as stale but it provided a hint on how to implement it. @@ -17,6 +12,12 @@ type DateType = z.infer; const IntEnum = (values: T) => z.number().refine((v) => values.includes(v)) as ZodType; +/** Helper to ensure booleans provided as strings end up with the correct value */ +const SafeBoolean = z.preprocess( + (v) => (v === "false" ? false : v), + z.coerce.boolean() +); + /** * Properties that should uniquely identify a Sled. */ @@ -78,9 +79,7 @@ export const BlockSize = z.preprocess( ); /** - * A count of bytes, typically used either for memory or storage capacity - * - * The maximum supported byte count is `i64::MAX`. This makes it somewhat inconvenient to define constructors: a u32 constructor can be infallible, but an i64 constructor can fail (if the value is negative) and a u64 constructor can fail (if the value is larger than i64::MAX). We provide all of these for consumers' convenience. + * Byte count to express memory or storage capacity. */ export const ByteCount = z.preprocess(processResponseBody, z.number().min(0)); @@ -109,7 +108,7 @@ export const ServiceUsingCertificate = z.preprocess( ); /** - * Client view of a {@link Certificate} + * View of a Certificate */ export const Certificate = z.preprocess( processResponseBody, @@ -118,13 +117,13 @@ export const Certificate = z.preprocess( id: z.string().uuid(), name: Name, service: ServiceUsingCertificate, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); /** - * Create-time parameters for a {@link Certificate} + * Create-time parameters for a `Certificate` */ export const CertificateCreate = z.preprocess( processResponseBody, @@ -180,8 +179,8 @@ export const ComponentUpdate = z.preprocess( z.object({ componentType: UpdateableComponentType, id: z.string().uuid(), - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), version: SemverVersion, }) ); @@ -199,7 +198,7 @@ export const ComponentUpdateResultsPage = z.preprocess( */ export const Cumulativedouble = z.preprocess( processResponseBody, - z.object({ startTime: DateType, value: z.number() }) + z.object({ startTime: z.coerce.date(), value: z.number() }) ); /** @@ -207,66 +206,51 @@ export const Cumulativedouble = z.preprocess( */ export const Cumulativeint64 = z.preprocess( processResponseBody, - z.object({ startTime: DateType, value: z.number() }) + z.object({ startTime: z.coerce.date(), value: z.number() }) +); + +/** + * Info about the current user + */ +export const CurrentUser = z.preprocess( + processResponseBody, + z.object({ + displayName: z.string(), + id: z.string().uuid(), + siloId: z.string().uuid(), + siloName: Name, + }) ); /** - * A simple type for managing a histogram metric. + * Histogram metric * * A histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any "gaps" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support. * * Note that any gaps, unsorted bins, or non-finite values will result in an error. - * - * Example ------- ```rust use oximeter::histogram::{BinRange, Histogram}; - * - * let edges = [0i64, 10, 20]; let mut hist = Histogram::new(&edges).unwrap(); assert_eq!(hist.n_bins(), 4); // One additional bin for the range (20..) assert_eq!(hist.n_samples(), 0); hist.sample(4); hist.sample(100); assert_eq!(hist.n_samples(), 2); - * - * let data = hist.iter().collect::>(); assert_eq!(data[0].range, BinRange::range(i64::MIN, 0)); // An additional bin for `..0` assert_eq!(data[0].count, 0); // Nothing is in this bin - * - * assert_eq!(data[1].range, BinRange::range(0, 10)); // The range `0..10` assert_eq!(data[1].count, 1); // 4 is sampled into this bin ``` - * - * Notes ----- - * - * Histograms may be constructed either from their left bin edges, or from a sequence of ranges. In either case, the left-most bin may be converted upon construction. In particular, if the left-most value is not equal to the minimum of the support, a new bin will be added from the minimum to that provided value. If the left-most value _is_ the support's minimum, because the provided bin was unbounded below, such as `(..0)`, then that bin will be converted into one bounded below, `(MIN..0)` in this case. - * - * The short of this is that, most of the time, it shouldn't matter. If one specifies the extremes of the support as their bins, be aware that the left-most may be converted from a `BinRange::RangeTo` into a `BinRange::Range`. In other words, the first bin of a histogram is _always_ a `Bin::Range` or a `Bin::RangeFrom` after construction. In fact, every bin is one of those variants, the `BinRange::RangeTo` is only provided as a convenience during construction. */ export const Histogramint64 = z.preprocess( processResponseBody, z.object({ bins: Binint64.array(), nSamples: z.number().min(0), - startTime: DateType, + startTime: z.coerce.date(), }) ); /** - * A simple type for managing a histogram metric. + * Histogram metric * * A histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any "gaps" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support. * * Note that any gaps, unsorted bins, or non-finite values will result in an error. - * - * Example ------- ```rust use oximeter::histogram::{BinRange, Histogram}; - * - * let edges = [0i64, 10, 20]; let mut hist = Histogram::new(&edges).unwrap(); assert_eq!(hist.n_bins(), 4); // One additional bin for the range (20..) assert_eq!(hist.n_samples(), 0); hist.sample(4); hist.sample(100); assert_eq!(hist.n_samples(), 2); - * - * let data = hist.iter().collect::>(); assert_eq!(data[0].range, BinRange::range(i64::MIN, 0)); // An additional bin for `..0` assert_eq!(data[0].count, 0); // Nothing is in this bin - * - * assert_eq!(data[1].range, BinRange::range(0, 10)); // The range `0..10` assert_eq!(data[1].count, 1); // 4 is sampled into this bin ``` - * - * Notes ----- - * - * Histograms may be constructed either from their left bin edges, or from a sequence of ranges. In either case, the left-most bin may be converted upon construction. In particular, if the left-most value is not equal to the minimum of the support, a new bin will be added from the minimum to that provided value. If the left-most value _is_ the support's minimum, because the provided bin was unbounded below, such as `(..0)`, then that bin will be converted into one bounded below, `(MIN..0)` in this case. - * - * The short of this is that, most of the time, it shouldn't matter. If one specifies the extremes of the support as their bins, be aware that the left-most may be converted from a `BinRange::RangeTo` into a `BinRange::Range`. In other words, the first bin of a histogram is _always_ a `Bin::Range` or a `Bin::RangeFrom` after construction. In fact, every bin is one of those variants, the `BinRange::RangeTo` is only provided as a convenience during construction. */ export const Histogramdouble = z.preprocess( processResponseBody, z.object({ bins: Bindouble.array(), nSamples: z.number().min(0), - startTime: DateType, + startTime: z.coerce.date(), }) ); @@ -276,7 +260,7 @@ export const Histogramdouble = z.preprocess( export const Datum = z.preprocess( processResponseBody, z.union([ - z.object({ datum: z.boolean(), type: z.enum(["bool"]) }), + z.object({ datum: SafeBoolean, type: z.enum(["bool"]) }), z.object({ datum: z.number(), type: z.enum(["i64"]) }), z.object({ datum: z.number(), type: z.enum(["f64"]) }), z.object({ datum: z.string(), type: z.enum(["string"]) }), @@ -321,13 +305,17 @@ export const Digest = z.preprocess( ); /** - * State of a Disk (primarily: attached or not) + * State of a Disk */ export const DiskState = z.preprocess( processResponseBody, z.union([ z.object({ state: z.enum(["creating"]) }), z.object({ state: z.enum(["detached"]) }), + z.object({ state: z.enum(["import_ready"]) }), + z.object({ state: z.enum(["importing_from_url"]) }), + z.object({ state: z.enum(["importing_from_bulk_writes"]) }), + z.object({ state: z.enum(["finalizing"]) }), z.object({ state: z.enum(["maintenance"]) }), z.object({ instance: z.string().uuid(), state: z.enum(["attaching"]) }), z.object({ instance: z.string().uuid(), state: z.enum(["attached"]) }), @@ -338,7 +326,7 @@ export const DiskState = z.preprocess( ); /** - * Client view of a {@link Disk} + * View of a Disk */ export const Disk = z.preprocess( processResponseBody, @@ -353,8 +341,8 @@ export const Disk = z.preprocess( size: ByteCount, snapshotId: z.string().uuid().optional(), state: DiskState, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); @@ -367,12 +355,12 @@ export const DiskSource = z.preprocess( z.object({ blockSize: BlockSize, type: z.enum(["blank"]) }), z.object({ snapshotId: z.string().uuid(), type: z.enum(["snapshot"]) }), z.object({ imageId: z.string().uuid(), type: z.enum(["image"]) }), - z.object({ imageId: z.string().uuid(), type: z.enum(["global_image"]) }), + z.object({ blockSize: BlockSize, type: z.enum(["importing_blocks"]) }), ]) ); /** - * Create-time parameters for a {@link Disk} + * Create-time parameters for a `Disk` */ export const DiskCreate = z.preprocess( processResponseBody, @@ -402,14 +390,6 @@ export const DiskResultsPage = z.preprocess( z.object({ items: Disk.array(), nextPage: z.string().optional() }) ); -/** - * OS image distribution - */ -export const Distribution = z.preprocess( - processResponseBody, - z.object({ name: Name, version: z.string() }) -); - /** * Error information from a response. */ @@ -422,6 +402,11 @@ export const Error = z.preprocess( }) ); +export const ExpectedDigest = z.preprocess( + processResponseBody, + z.object({ sha256: z.string() }) +); + /** * The kind of an external IP address for an instance */ @@ -451,6 +436,14 @@ export const ExternalIpResultsPage = z.preprocess( z.object({ items: ExternalIp.array(), nextPage: z.string().optional() }) ); +/** + * Parameters for finalizing a disk + */ +export const FinalizeDisk = z.preprocess( + processResponseBody, + z.object({ snapshotName: Name.optional() }) +); + export const FleetRole = z.preprocess( processResponseBody, z.enum(["admin", "collaborator", "viewer"]) @@ -479,7 +472,7 @@ export const FleetRoleRoleAssignment = z.preprocess( ); /** - * Client view of a `Policy`, which describes how this resource may be accessed + * Policy for a particular resource * * Note that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource. */ @@ -489,61 +482,7 @@ export const FleetRolePolicy = z.preprocess( ); /** - * Client view of global Images - */ -export const GlobalImage = z.preprocess( - processResponseBody, - z.object({ - blockSize: ByteCount, - description: z.string(), - digest: Digest.optional(), - distribution: z.string(), - id: z.string().uuid(), - name: Name, - size: ByteCount, - timeCreated: DateType, - timeModified: DateType, - url: z.string().optional(), - version: z.string(), - }) -); - -/** - * The source of the underlying image. - */ -export const ImageSource = z.preprocess( - processResponseBody, - z.union([ - z.object({ type: z.enum(["url"]), url: z.string() }), - z.object({ id: z.string().uuid(), type: z.enum(["snapshot"]) }), - z.object({ type: z.enum(["you_can_boot_anything_as_long_as_its_alpine"]) }), - ]) -); - -/** - * Create-time parameters for an {@link GlobalImage} - */ -export const GlobalImageCreate = z.preprocess( - processResponseBody, - z.object({ - blockSize: BlockSize, - description: z.string(), - distribution: Distribution, - name: Name, - source: ImageSource, - }) -); - -/** - * A single page of results - */ -export const GlobalImageResultsPage = z.preprocess( - processResponseBody, - z.object({ items: GlobalImage.array(), nextPage: z.string().optional() }) -); - -/** - * Client view of a {@link Group} + * View of a Group */ export const Group = z.preprocess( processResponseBody, @@ -568,7 +507,7 @@ export const IdentityProviderType = z.preprocess( ); /** - * Client view of an {@link IdentityProvider} + * View of an Identity Provider */ export const IdentityProvider = z.preprocess( processResponseBody, @@ -577,8 +516,8 @@ export const IdentityProvider = z.preprocess( id: z.string().uuid(), name: Name, providerType: IdentityProviderType, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); @@ -599,7 +538,7 @@ export const IdpMetadataSource = z.preprocess( ); /** - * Client view of project Images + * Client view of images */ export const Image = z.preprocess( processResponseBody, @@ -610,17 +549,29 @@ export const Image = z.preprocess( id: z.string().uuid(), name: Name, os: z.string(), - projectId: z.string().uuid(), + projectId: z.string().uuid().optional(), size: ByteCount, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), url: z.string().optional(), version: z.string(), }) ); /** - * Create-time parameters for an {@link Image} + * The source of the underlying image. + */ +export const ImageSource = z.preprocess( + processResponseBody, + z.union([ + z.object({ type: z.enum(["url"]), url: z.string() }), + z.object({ id: z.string().uuid(), type: z.enum(["snapshot"]) }), + z.object({ type: z.enum(["you_can_boot_anything_as_long_as_its_alpine"]) }), + ]) +); + +/** + * Create-time parameters for an `Image` */ export const ImageCreate = z.preprocess( processResponseBody, @@ -642,6 +593,22 @@ export const ImageResultsPage = z.preprocess( z.object({ items: Image.array(), nextPage: z.string().optional() }) ); +/** + * Parameters for importing blocks with a bulk write + */ +export const ImportBlocksBulkWrite = z.preprocess( + processResponseBody, + z.object({ base64EncodedData: z.string(), offset: z.number().min(0) }) +); + +/** + * Parameters for importing blocks from a URL to a disk + */ +export const ImportBlocksFromUrl = z.preprocess( + processResponseBody, + z.object({ expectedDigest: ExpectedDigest.optional(), url: z.string() }) +); + /** * The number of CPUs in an Instance */ @@ -672,7 +639,7 @@ export const InstanceState = z.preprocess( ); /** - * Client view of an {@link Instance} + * View of an Instance */ export const Instance = z.preprocess( processResponseBody, @@ -685,9 +652,9 @@ export const Instance = z.preprocess( ncpus: InstanceCpuCount, projectId: z.string().uuid(), runState: InstanceState, - timeCreated: DateType, - timeModified: DateType, - timeRunStateUpdated: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), + timeRunStateUpdated: z.coerce.date(), }) ); @@ -709,9 +676,9 @@ export const InstanceDiskAttachment = z.preprocess( ); /** - * Create-time parameters for a {@link NetworkInterface} + * Create-time parameters for an `InstanceNetworkInterface` */ -export const NetworkInterfaceCreate = z.preprocess( +export const InstanceNetworkInterfaceCreate = z.preprocess( processResponseBody, z.object({ description: z.string(), @@ -723,13 +690,13 @@ export const NetworkInterfaceCreate = z.preprocess( ); /** - * Describes an attachment of a `NetworkInterface` to an `Instance`, at the time the instance is created. + * Describes an attachment of an `InstanceNetworkInterface` to an `Instance`, at the time the instance is created. */ export const InstanceNetworkInterfaceAttachment = z.preprocess( processResponseBody, z.union([ z.object({ - params: NetworkInterfaceCreate.array(), + params: InstanceNetworkInterfaceCreate.array(), type: z.enum(["create"]), }), z.object({ type: z.enum(["default"]) }), @@ -738,7 +705,7 @@ export const InstanceNetworkInterfaceAttachment = z.preprocess( ); /** - * Create-time parameters for an {@link Instance} + * Create-time parameters for an `Instance` */ export const InstanceCreate = z.preprocess( processResponseBody, @@ -753,19 +720,78 @@ export const InstanceCreate = z.preprocess( networkInterfaces: InstanceNetworkInterfaceAttachment.default({ type: "default", }).optional(), - start: z.boolean().default(true).optional(), + start: SafeBoolean.default(true).optional(), userData: z.string().default("").optional(), }) ); /** - * Migration parameters for an {@link Instance} + * Migration parameters for an `Instance` */ export const InstanceMigrate = z.preprocess( processResponseBody, z.object({ dstSledId: z.string().uuid() }) ); +/** + * A MAC address + * + * A Media Access Control address, in EUI-48 format + */ +export const MacAddr = z.preprocess( + processResponseBody, + z + .string() + .min(5) + .max(17) + .regex(/^([0-9a-fA-F]{0,2}:){5}[0-9a-fA-F]{0,2}$/) +); + +/** + * An `InstanceNetworkInterface` represents a virtual network interface device attached to an instance. + */ +export const InstanceNetworkInterface = z.preprocess( + processResponseBody, + z.object({ + description: z.string(), + id: z.string().uuid(), + instanceId: z.string().uuid(), + ip: z.string(), + mac: MacAddr, + name: Name, + primary: SafeBoolean, + subnetId: z.string().uuid(), + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), + vpcId: z.string().uuid(), + }) +); + +/** + * A single page of results + */ +export const InstanceNetworkInterfaceResultsPage = z.preprocess( + processResponseBody, + z.object({ + items: InstanceNetworkInterface.array(), + nextPage: z.string().optional(), + }) +); + +/** + * Parameters for updating an `InstanceNetworkInterface` + * + * Note that modifying IP addresses for an interface is not yet supported, a new interface must be created instead. + */ +export const InstanceNetworkInterfaceUpdate = z.preprocess( + processResponseBody, + z.object({ + description: z.string().optional(), + name: Name.optional(), + primary: SafeBoolean.default(false).optional(), + }) +); + /** * A single page of results */ @@ -827,15 +853,13 @@ export const IpPool = z.preprocess( description: z.string(), id: z.string().uuid(), name: Name, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); /** - * Create-time parameters for an IP Pool. - * - * See {@link IpPool} + * Create-time parameters for an `IpPool` */ export const IpPoolCreate = z.preprocess( processResponseBody, @@ -869,7 +893,11 @@ export const IpRange = z.preprocess( export const IpPoolRange = z.preprocess( processResponseBody, - z.object({ id: z.string().uuid(), range: IpRange, timeCreated: DateType }) + z.object({ + id: z.string().uuid(), + range: IpRange, + timeCreated: z.coerce.date(), + }) ); /** @@ -910,26 +938,12 @@ export const L4PortRange = z.preprocess( .regex(/^[0-9]{1,5}(-[0-9]{1,5})?$/) ); -/** - * A MAC address - * - * A Media Access Control address, in EUI-48 format - */ -export const MacAddr = z.preprocess( - processResponseBody, - z - .string() - .min(5) - .max(17) - .regex(/^([0-9a-fA-F]{0,2}:){5}[0-9a-fA-F]{0,2}$/) -); - /** * A `Measurement` is a timestamped datum from a single metric */ export const Measurement = z.preprocess( processResponseBody, - z.object({ datum: Datum, timestamp: DateType }) + z.object({ datum: Datum, timestamp: z.coerce.date() }) ); /** @@ -940,55 +954,6 @@ export const MeasurementResultsPage = z.preprocess( z.object({ items: Measurement.array(), nextPage: z.string().optional() }) ); -/** - * A `NetworkInterface` represents a virtual network interface device. - */ -export const NetworkInterface = z.preprocess( - processResponseBody, - z.object({ - description: z.string(), - id: z.string().uuid(), - instanceId: z.string().uuid(), - ip: z.string(), - mac: MacAddr, - name: Name, - primary: z.boolean(), - subnetId: z.string().uuid(), - timeCreated: DateType, - timeModified: DateType, - vpcId: z.string().uuid(), - }) -); - -/** - * A single page of results - */ -export const NetworkInterfaceResultsPage = z.preprocess( - processResponseBody, - z.object({ items: NetworkInterface.array(), nextPage: z.string().optional() }) -); - -/** - * Parameters for updating a {@link NetworkInterface}. - * - * Note that modifying IP addresses for an interface is not yet supported, a new interface must be created instead. - */ -export const NetworkInterfaceUpdate = z.preprocess( - processResponseBody, - z.object({ - description: z.string().optional(), - name: Name.optional(), - primary: z.boolean().default(false).optional(), - }) -); - -/** - * Unique name for a saga `Node` - * - * Each node requires a string name that's unique within its DAG. The name is used to identify its output. Nodes that depend on a given node (either directly or indirectly) can access the node's output using its name. - */ -export const NodeName = z.preprocess(processResponseBody, z.string()); - /** * A password used to authenticate a user * @@ -1002,7 +967,9 @@ export const PhysicalDiskType = z.preprocess( ); /** - * Client view of a {@link PhysicalDisk} + * View of a Physical Disk + * + * Physical disks reside in a particular sled and are used to store both Instance Disk data as well as internal metadata. */ export const PhysicalDisk = z.preprocess( processResponseBody, @@ -1012,8 +979,8 @@ export const PhysicalDisk = z.preprocess( model: z.string(), serial: z.string(), sledId: z.string().uuid().optional(), - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), vendor: z.string(), }) ); @@ -1027,7 +994,7 @@ export const PhysicalDiskResultsPage = z.preprocess( ); /** - * Client view of a {@link Project} + * View of a Project */ export const Project = z.preprocess( processResponseBody, @@ -1035,13 +1002,13 @@ export const Project = z.preprocess( description: z.string(), id: z.string().uuid(), name: Name, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); /** - * Create-time parameters for a {@link Project} + * Create-time parameters for a `Project` */ export const ProjectCreate = z.preprocess( processResponseBody, @@ -1076,7 +1043,7 @@ export const ProjectRoleRoleAssignment = z.preprocess( ); /** - * Client view of a `Policy`, which describes how this resource may be accessed + * Policy for a particular resource * * Note that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource. */ @@ -1086,7 +1053,7 @@ export const ProjectRolePolicy = z.preprocess( ); /** - * Updateable properties of a {@link Project} + * Updateable properties of a `Project` */ export const ProjectUpdate = z.preprocess( processResponseBody, @@ -1094,14 +1061,14 @@ export const ProjectUpdate = z.preprocess( ); /** - * Client view of an {@link Rack} + * View of an Rack */ export const Rack = z.preprocess( processResponseBody, z.object({ id: z.string().uuid(), - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); @@ -1127,7 +1094,7 @@ export const RoleName = z.preprocess( ); /** - * Client view of a {@link Role} + * View of a Role */ export const Role = z.preprocess( processResponseBody, @@ -1145,7 +1112,7 @@ export const RoleResultsPage = z.preprocess( /** * A `RouteDestination` is used to match traffic with a routing rule, on the destination of that traffic. * - * When traffic is to be sent to a destination that is within a given `RouteDestination`, the corresponding {@link RouterRoute} applies, and traffic will be forward to the {@link RouteTarget} for that rule. + * When traffic is to be sent to a destination that is within a given `RouteDestination`, the corresponding `RouterRoute` applies, and traffic will be forward to the `RouteTarget` for that rule. */ export const RouteDestination = z.preprocess( processResponseBody, @@ -1172,9 +1139,9 @@ export const RouteTarget = z.preprocess( ); /** - * The classification of a {@link RouterRoute} as defined by the system. The kind determines certain attributes such as if the route is modifiable and describes how or where the route was created. + * The kind of a `RouterRoute` * - * See [RFD-21](https://rfd.shared.oxide.computer/rfd/0021#concept-router) for more context + * The kind determines certain attributes such as if the route is modifiable and describes how or where the route was created. */ export const RouterRouteKind = z.preprocess( processResponseBody, @@ -1193,14 +1160,14 @@ export const RouterRoute = z.preprocess( kind: RouterRouteKind, name: Name, target: RouteTarget, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), vpcRouterId: z.string().uuid(), }) ); /** - * Create-time parameters for a `omicron_common::api::external::RouterRoute` + * Create-time parameters for a `RouterRoute` */ export const RouterRouteCreate = z.preprocess( processResponseBody, @@ -1221,7 +1188,7 @@ export const RouterRouteResultsPage = z.preprocess( ); /** - * Updateable properties of a `omicron_common::api::external::RouterRoute` + * Updateable properties of a `RouterRoute` */ export const RouterRouteUpdate = z.preprocess( processResponseBody, @@ -1233,46 +1200,6 @@ export const RouterRouteUpdate = z.preprocess( }) ); -export const SagaErrorInfo = z.preprocess( - processResponseBody, - z.union([ - z.object({ - error: z.enum(["action_failed"]), - sourceError: z.record(z.unknown()), - }), - z.object({ error: z.enum(["deserialize_failed"]), message: z.string() }), - z.object({ error: z.enum(["injected_error"]) }), - z.object({ error: z.enum(["serialize_failed"]), message: z.string() }), - z.object({ error: z.enum(["subsaga_create_failed"]), message: z.string() }), - ]) -); - -export const SagaState = z.preprocess( - processResponseBody, - z.union([ - z.object({ state: z.enum(["running"]) }), - z.object({ state: z.enum(["succeeded"]) }), - z.object({ - errorInfo: SagaErrorInfo, - errorNodeName: NodeName, - state: z.enum(["failed"]), - }), - ]) -); - -export const Saga = z.preprocess( - processResponseBody, - z.object({ id: z.string().uuid(), state: SagaState }) -); - -/** - * A single page of results - */ -export const SagaResultsPage = z.preprocess( - processResponseBody, - z.object({ items: Saga.array(), nextPage: z.string().optional() }) -); - /** * Identity-related metadata that's included in nearly all public API objects */ @@ -1288,8 +1215,8 @@ export const SamlIdentityProvider = z.preprocess( sloUrl: z.string(), spClientId: z.string(), technicalContactEmail: z.string(), - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); @@ -1305,7 +1232,7 @@ export const SamlIdentityProviderCreate = z.preprocess( idpEntityId: z.string(), idpMetadataSource: IdpMetadataSource, name: Name, - signingKeypair: DerEncodedKeyPair.optional(), + signingKeypair: DerEncodedKeyPair.default(null).optional(), sloUrl: z.string(), spClientId: z.string(), technicalContactEmail: z.string(), @@ -1321,30 +1248,32 @@ export const SiloIdentityMode = z.preprocess( ); /** - * Client view of a ['Silo'] + * View of a Silo + * + * A Silo is the highest level unit of isolation. */ export const Silo = z.preprocess( processResponseBody, z.object({ description: z.string(), - discoverable: z.boolean(), + discoverable: SafeBoolean, id: z.string().uuid(), identityMode: SiloIdentityMode, name: Name, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); /** - * Create-time parameters for a {@link Silo} + * Create-time parameters for a `Silo` */ export const SiloCreate = z.preprocess( processResponseBody, z.object({ adminGroupName: z.string().optional(), description: z.string(), - discoverable: z.boolean(), + discoverable: SafeBoolean, identityMode: SiloIdentityMode, name: Name, }) @@ -1378,7 +1307,7 @@ export const SiloRoleRoleAssignment = z.preprocess( ); /** - * Client view of a `Policy`, which describes how this resource may be accessed + * Policy for a particular resource * * Note that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource. */ @@ -1396,8 +1325,8 @@ export const Sled = z.preprocess( baseboard: Baseboard, id: z.string().uuid(), rackId: z.string().uuid(), - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), usableHardwareThreads: z.number().min(0).max(4294967295), usablePhysicalRam: ByteCount, }) @@ -1417,7 +1346,7 @@ export const SnapshotState = z.preprocess( ); /** - * Client view of a Snapshot + * View of a Snapshot */ export const Snapshot = z.preprocess( processResponseBody, @@ -1429,13 +1358,13 @@ export const Snapshot = z.preprocess( projectId: z.string().uuid(), size: ByteCount, state: SnapshotState, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); /** - * Create-time parameters for a {@link Snapshot} + * Create-time parameters for a `Snapshot` */ export const SnapshotCreate = z.preprocess( processResponseBody, @@ -1456,7 +1385,7 @@ export const SpoofLoginBody = z.preprocess( ); /** - * Client view of a {@link SshKey} + * View of an SSH Key */ export const SshKey = z.preprocess( processResponseBody, @@ -1466,13 +1395,13 @@ export const SshKey = z.preprocess( name: Name, publicKey: z.string(), siloUserId: z.string().uuid(), - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); /** - * Create-time parameters for an {@link SshKey} + * Create-time parameters for an `SshKey` */ export const SshKeyCreate = z.preprocess( processResponseBody, @@ -1494,8 +1423,8 @@ export const SystemUpdate = z.preprocess( processResponseBody, z.object({ id: z.string().uuid(), - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), version: SemverVersion, }) ); @@ -1539,8 +1468,8 @@ export const UpdateDeployment = z.preprocess( z.object({ id: z.string().uuid(), status: UpdateStatus, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), version: SemverVersion, }) ); @@ -1564,8 +1493,8 @@ export const UpdateableComponent = z.preprocess( id: z.string().uuid(), status: UpdateStatus, systemVersion: SemverVersion, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), version: SemverVersion, }) ); @@ -1582,7 +1511,7 @@ export const UpdateableComponentResultsPage = z.preprocess( ); /** - * Client view of a {@link User} + * View of a User */ export const User = z.preprocess( processResponseBody, @@ -1594,7 +1523,9 @@ export const User = z.preprocess( ); /** - * Client view of a {@link UserBuiltin} + * View of a Built-in User + * + * A Built-in User is explicitly created as opposed to being derived from an Identify Provider. */ export const UserBuiltin = z.preprocess( processResponseBody, @@ -1602,8 +1533,8 @@ export const UserBuiltin = z.preprocess( description: z.string(), id: z.string().uuid(), name: Name, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); @@ -1643,7 +1574,7 @@ export const UserPassword = z.preprocess( ); /** - * Create-time parameters for a {@link User} + * Create-time parameters for a `User` */ export const UserCreate = z.preprocess( processResponseBody, @@ -1667,7 +1598,7 @@ export const UsernamePasswordCredentials = z.preprocess( ); /** - * Client view of a {@link Vpc} + * View of a VPC */ export const Vpc = z.preprocess( processResponseBody, @@ -1679,13 +1610,13 @@ export const Vpc = z.preprocess( name: Name, projectId: z.string().uuid(), systemRouterId: z.string().uuid(), - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), }) ); /** - * Create-time parameters for a {@link Vpc} + * Create-time parameters for a `Vpc` */ export const VpcCreate = z.preprocess( processResponseBody, @@ -1747,7 +1678,7 @@ export const VpcFirewallRuleStatus = z.preprocess( ); /** - * A `VpcFirewallRuleTarget` is used to specify the set of {@link Instance}s to which a firewall rule applies. + * A `VpcFirewallRuleTarget` is used to specify the set of `Instance`s to which a firewall rule applies. */ export const VpcFirewallRuleTarget = z.preprocess( processResponseBody, @@ -1775,8 +1706,8 @@ export const VpcFirewallRule = z.preprocess( priority: z.number().min(0).max(65535), status: VpcFirewallRuleStatus, targets: VpcFirewallRuleTarget.array(), - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), vpcId: z.string().uuid(), }) ); @@ -1837,14 +1768,14 @@ export const VpcRouter = z.preprocess( id: z.string().uuid(), kind: VpcRouterKind, name: Name, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), vpcId: z.string().uuid(), }) ); /** - * Create-time parameters for a {@link VpcRouter} + * Create-time parameters for a `VpcRouter` */ export const VpcRouterCreate = z.preprocess( processResponseBody, @@ -1860,7 +1791,7 @@ export const VpcRouterResultsPage = z.preprocess( ); /** - * Updateable properties of a {@link VpcRouter} + * Updateable properties of a `VpcRouter` */ export const VpcRouterUpdate = z.preprocess( processResponseBody, @@ -1878,14 +1809,14 @@ export const VpcSubnet = z.preprocess( ipv4Block: Ipv4Net, ipv6Block: Ipv6Net, name: Name, - timeCreated: DateType, - timeModified: DateType, + timeCreated: z.coerce.date(), + timeModified: z.coerce.date(), vpcId: z.string().uuid(), }) ); /** - * Create-time parameters for a {@link VpcSubnet} + * Create-time parameters for a `VpcSubnet` */ export const VpcSubnetCreate = z.preprocess( processResponseBody, @@ -1906,7 +1837,7 @@ export const VpcSubnetResultsPage = z.preprocess( ); /** - * Updateable properties of a {@link VpcSubnet} + * Updateable properties of a `VpcSubnet` */ export const VpcSubnetUpdate = z.preprocess( processResponseBody, @@ -1914,7 +1845,7 @@ export const VpcSubnetUpdate = z.preprocess( ); /** - * Updateable properties of a {@link Vpc} + * Updateable properties of a `Vpc` */ export const VpcUpdate = z.preprocess( processResponseBody, @@ -1925,16 +1856,6 @@ export const VpcUpdate = z.preprocess( }) ); -/** - * Supported set of sort modes for scanning by name only - * - * Currently, we only support scanning in ascending order. - */ -export const NameSortMode = z.preprocess( - processResponseBody, - z.enum(["name_ascending"]) -); - /** * Supported set of sort modes for scanning by name or id */ @@ -1967,6 +1888,16 @@ export const SystemMetricName = z.preprocess( ]) ); +/** + * Supported set of sort modes for scanning by name only + * + * Currently, we only support scanning in ascending order. + */ +export const NameSortMode = z.preprocess( + processResponseBody, + z.enum(["name_ascending"]) +); + export const DeviceAuthRequestParams = z.preprocess( processResponseBody, z.object({ @@ -2039,80 +1970,90 @@ export const LogoutParams = z.preprocess( }) ); -export const SystemImageViewByIdParams = z.preprocess( +export const DiskListParams = z.preprocess( processResponseBody, z.object({ - path: z.object({ - id: z.string().uuid(), + path: z.object({}), + query: z.object({ + limit: z.number().min(1).max(4294967295).optional(), + pageToken: z.string().optional(), + project: NameOrId.optional(), + sortBy: NameOrIdSortMode.optional(), }), - query: z.object({}), }) ); -export const SystemImageListParams = z.preprocess( +export const DiskCreateParams = z.preprocess( processResponseBody, z.object({ path: z.object({}), query: z.object({ - limit: z.number().min(1).max(4294967295).optional(), - pageToken: z.string().optional(), - sortBy: NameSortMode.optional(), + project: NameOrId.optional(), }), }) ); -export const SystemImageCreateParams = z.preprocess( +export const DiskViewParams = z.preprocess( processResponseBody, z.object({ - path: z.object({}), - query: z.object({}), + path: z.object({ + disk: NameOrId, + }), + query: z.object({ + project: NameOrId.optional(), + }), }) ); -export const SystemImageViewParams = z.preprocess( +export const DiskDeleteParams = z.preprocess( processResponseBody, z.object({ path: z.object({ - imageName: Name, + disk: NameOrId, + }), + query: z.object({ + project: NameOrId.optional(), }), - query: z.object({}), }) ); -export const SystemImageDeleteParams = z.preprocess( +export const DiskBulkWriteImportParams = z.preprocess( processResponseBody, z.object({ path: z.object({ - imageName: Name, + disk: NameOrId, + }), + query: z.object({ + project: NameOrId.optional(), }), - query: z.object({}), }) ); -export const DiskListParams = z.preprocess( +export const DiskBulkWriteImportStartParams = z.preprocess( processResponseBody, z.object({ - path: z.object({}), + path: z.object({ + disk: NameOrId, + }), query: z.object({ - limit: z.number().min(1).max(4294967295).optional(), - pageToken: z.string().optional(), project: NameOrId.optional(), - sortBy: NameOrIdSortMode.optional(), }), }) ); -export const DiskCreateParams = z.preprocess( +export const DiskBulkWriteImportStopParams = z.preprocess( processResponseBody, z.object({ - path: z.object({}), + path: z.object({ + disk: NameOrId, + }), query: z.object({ project: NameOrId.optional(), }), }) ); -export const DiskViewParams = z.preprocess( +export const DiskFinalizeImportParams = z.preprocess( processResponseBody, z.object({ path: z.object({ @@ -2124,7 +2065,7 @@ export const DiskViewParams = z.preprocess( }) ); -export const DiskDeleteParams = z.preprocess( +export const DiskImportBlocksFromUrlParams = z.preprocess( processResponseBody, z.object({ path: z.object({ @@ -2144,10 +2085,10 @@ export const DiskMetricsListParams = z.preprocess( metric: DiskMetricName, }), query: z.object({ - endTime: DateType.optional(), + endTime: z.coerce.date().optional(), limit: z.number().min(1).max(4294967295).optional(), pageToken: z.string().optional(), - startTime: DateType.optional(), + startTime: z.coerce.date().optional(), project: NameOrId.optional(), }), }) @@ -2180,6 +2121,7 @@ export const ImageListParams = z.preprocess( z.object({ path: z.object({}), query: z.object({ + includeSiloImages: SafeBoolean.optional(), limit: z.number().min(1).max(4294967295).optional(), pageToken: z.string().optional(), project: NameOrId.optional(), @@ -2222,6 +2164,18 @@ export const ImageDeleteParams = z.preprocess( }) ); +export const ImagePromoteParams = z.preprocess( + processResponseBody, + z.object({ + path: z.object({ + image: NameOrId, + }), + query: z.object({ + project: NameOrId.optional(), + }), + }) +); + export const InstanceListParams = z.preprocess( processResponseBody, z.object({ @@ -2366,6 +2320,9 @@ export const InstanceSerialConsoleStreamParams = z.preprocess( instance: NameOrId, }), query: z.object({ + fromStart: z.number().min(0).optional(), + maxBytes: z.number().min(0).optional(), + mostRecent: z.number().min(0).optional(), project: NameOrId.optional(), }), }) @@ -2956,11 +2913,11 @@ export const SystemMetricParams = z.preprocess( metricName: SystemMetricName, }), query: z.object({ - endTime: DateType.optional(), + endTime: z.coerce.date().optional(), id: z.string().uuid().optional(), limit: z.number().min(1).max(4294967295).optional(), pageToken: z.string().optional(), - startTime: DateType.optional(), + startTime: z.coerce.date().optional(), }), }) ); @@ -3002,28 +2959,6 @@ export const RoleViewParams = z.preprocess( }) ); -export const SagaListParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({}), - query: z.object({ - limit: z.number().min(1).max(4294967295).optional(), - pageToken: z.string().optional(), - sortBy: IdSortMode.optional(), - }), - }) -); - -export const SagaViewParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({ - sagaId: z.string().uuid(), - }), - query: z.object({}), - }) -); - export const SiloListParams = z.preprocess( processResponseBody, z.object({ diff --git a/lib/client/type-tests.ts b/lib/client/type-tests.ts index 1b27e5a..22c1abe 100644 --- a/lib/client/type-tests.ts +++ b/lib/client/type-tests.ts @@ -21,6 +21,17 @@ export function generateTypeTests(spec: OpenAPIV3.Document) { const schema = spec.components!.schemas![name]; if (!schema) continue; + // TODO: these two types are failing to pass type asserts but they + // seem to be correct in shape. Follow up on why the type tests + // are failing + if (["IpPoolRange", "IpPoolRangeResultsPage"].includes(name)) { + w(`assert< + // @ts-expect-error + Equals> + >();`); + continue; + } + w(`assert>>();`); } } diff --git a/lib/client/zodValidators.ts b/lib/client/zodValidators.ts index 9be3e95..95a3e50 100644 --- a/lib/client/zodValidators.ts +++ b/lib/client/zodValidators.ts @@ -16,11 +16,6 @@ export function generateZodValidators(spec: OpenAPIV3.Document) { import { z, ZodType } from 'zod'; import { snakeify, processResponseBody } from './util'; - const DateType = z.preprocess((arg) => { - if (typeof arg == "string" || arg instanceof Date) return new Date(arg); - }, z.date()); - type DateType = z.infer; - /** * Zod only supports string enums at the moment. A previous issue was opened * and closed as stale but it provided a hint on how to implement it. @@ -30,6 +25,9 @@ export function generateZodValidators(spec: OpenAPIV3.Document) { */ const IntEnum = (values: T) => z.number().refine((v) => values.includes(v)) as ZodType; + + /** Helper to ensure booleans provided as strings end up with the correct value */ + const SafeBoolean = z.preprocess(v => v === "false" ? false : v, z.coerce.boolean()) `); const schemaNames = getSortedSchemas(spec); diff --git a/lib/schema/zod.test.ts b/lib/schema/zod.test.ts index a07f728..220fe09 100644 --- a/lib/schema/zod.test.ts +++ b/lib/schema/zod.test.ts @@ -11,12 +11,12 @@ beforeEach(() => { test("boolean", () => { schemaToZod({ type: "boolean" }, io); - expect(out.value()).toMatchInlineSnapshot('"z.boolean()"'); + expect(out.value()).toMatchInlineSnapshot('"SafeBoolean"'); }); test("boolean with default", () => { schemaToZod({ type: "boolean", default: false }, io); - expect(out.value()).toMatchInlineSnapshot('"z.boolean().default(false)"'); + expect(out.value()).toMatchInlineSnapshot('"SafeBoolean.default(false)"'); }); test("string", () => { diff --git a/lib/schema/zod.ts b/lib/schema/zod.ts index f68e683..b872013 100644 --- a/lib/schema/zod.ts +++ b/lib/schema/zod.ts @@ -11,7 +11,7 @@ export const schemaToZod = makeSchemaGenerator({ }, boolean(schema, { w0 }) { - w0(`z.boolean()`); + w0(`SafeBoolean`); if ("default" in schema) { w0(`.default(${schema.default})`); } @@ -48,7 +48,7 @@ export const schemaToZod = makeSchemaGenerator({ }, date(_, { w0 }) { - w0("DateType"); + w0("z.coerce.date()"); }, number(_, { w0 }) { diff --git a/package-lock.json b/package-lock.json index e73bf92..6cc5d12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,20 +12,20 @@ "@types/node": "^18.7.20", "esbuild-register": "^3.3.3", "happy-dom": "^6.0.4", - "msw": "^0.47.4", + "msw": "^1.2.1", "openapi-types": "^12.0.2", "prettier": "2.7.1", "swagger-parser": "^10.0.3", "ts-pattern": "^4.0.5", "tsafe": "^1.1.1", - "tsup": "^6.2.3", + "tsup": "^6.7.0", "type-fest": "^3.1.0", - "typescript": "^4.8.4", - "vitest": "^0.23.4", - "zod": "^3.19.1" + "typescript": "^5.0.4", + "vitest": "^0.31.0", + "zod": "^3.21.4" }, "optionalDependencies": { - "zod": "^3.19.1" + "zod": "^3.20" } }, "node_modules/@apidevtools/json-schema-ref-parser": { @@ -68,6 +68,364 @@ "openapi-types": ">=7" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz", + "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz", + "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz", + "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz", + "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz", + "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz", + "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz", + "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz", + "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz", + "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz", + "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz", + "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz", + "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz", + "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz", + "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz", + "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz", + "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz", + "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz", + "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz", + "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz", + "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz", + "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz", + "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, "node_modules/@jsdevtools/ono": { "version": "7.1.3", "dev": true, @@ -154,9 +512,10 @@ } }, "node_modules/@types/chai": { - "version": "4.3.3", - "dev": true, - "license": "MIT" + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", + "dev": true }, "node_modules/@types/chai-subset": { "version": "1.3.3", @@ -233,6 +592,75 @@ "@types/node": "*" } }, + "node_modules/@vitest/expect": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.31.0.tgz", + "integrity": "sha512-Jlm8ZTyp6vMY9iz9Ny9a0BHnCG4fqBa8neCF6Pk/c/6vkUk49Ls6UBlgGAU82QnzzoaUs9E/mUhq/eq9uMOv/g==", + "dev": true, + "dependencies": { + "@vitest/spy": "0.31.0", + "@vitest/utils": "0.31.0", + "chai": "^4.3.7" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.31.0.tgz", + "integrity": "sha512-H1OE+Ly7JFeBwnpHTrKyCNm/oZgr+16N4qIlzzqSG/YRQDATBYmJb/KUn3GrZaiQQyL7GwpNHVZxSQd6juLCgw==", + "dev": true, + "dependencies": { + "@vitest/utils": "0.31.0", + "concordance": "^5.0.4", + "p-limit": "^4.0.0", + "pathe": "^1.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.31.0.tgz", + "integrity": "sha512-5dTXhbHnyUMTMOujZPB0wjFjQ6q5x9c8TvAsSPUNKjp1tVU7i9pbqcKPqntyu2oXtmVxKbuHCqrOd+Ft60r4tg==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "pretty-format": "^27.5.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.31.0.tgz", + "integrity": "sha512-IzCEQ85RN26GqjQNkYahgVLLkULOxOm5H/t364LG0JYb3Apg0PsYCHLBYGA006+SVRMWhQvHlBBCyuByAMFmkg==", + "dev": true, + "dependencies": { + "tinyspy": "^2.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.31.0.tgz", + "integrity": "sha512-kahaRyLX7GS1urekRXN2752X4gIgOGVX4Wo8eDUGUkTWlGpXzf5ZS6N9RUUS+Re3XEE8nVGqNyxkSxF5HXlGhQ==", + "dev": true, + "dependencies": { + "concordance": "^5.0.4", + "loupe": "^2.3.6", + "pretty-format": "^27.5.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/@xmldom/xmldom": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.3.tgz", @@ -257,9 +685,10 @@ "peer": true }, "node_modules/acorn": { - "version": "8.8.0", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -402,8 +831,9 @@ }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -483,6 +913,12 @@ "node": ">= 6" } }, + "node_modules/blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", + "dev": true + }, "node_modules/brace-expansion": { "version": "1.1.11", "dev": true, @@ -540,17 +976,18 @@ "license": "MIT" }, "node_modules/bundle-require": { - "version": "3.1.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.0.1.tgz", + "integrity": "sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==", "dev": true, - "license": "MIT", "dependencies": { - "load-tsconfig": "^0.2.0" + "load-tsconfig": "^0.2.3" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "peerDependencies": { - "esbuild": ">=0.13" + "esbuild": ">=0.17" } }, "node_modules/cac": { @@ -584,13 +1021,14 @@ "license": "Apache-2.0" }, "node_modules/chai": { - "version": "4.3.6", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", @@ -624,8 +1062,9 @@ }, "node_modules/check-error": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -768,6 +1207,25 @@ "typedarray": "^0.0.6" } }, + "node_modules/concordance": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", + "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", + "dev": true, + "dependencies": { + "date-time": "^3.1.0", + "esutils": "^2.0.3", + "fast-diff": "^1.2.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.15", + "md5-hex": "^3.0.1", + "semver": "^7.3.2", + "well-known-symbols": "^2.0.0" + }, + "engines": { + "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" + } + }, "node_modules/cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", @@ -869,6 +1327,18 @@ "node": ">=12" } }, + "node_modules/date-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", + "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", + "dev": true, + "dependencies": { + "time-zone": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/debug": { "version": "4.3.4", "dev": true, @@ -893,214 +1363,505 @@ "peer": true }, "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dir-glob": { "version": "3.0.1", "dev": true, "license": "MIT", "dependencies": { - "type-detect": "^4.0.0" + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/entities": { + "version": "4.4.0", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz", + "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.18", + "@esbuild/android-arm64": "0.17.18", + "@esbuild/android-x64": "0.17.18", + "@esbuild/darwin-arm64": "0.17.18", + "@esbuild/darwin-x64": "0.17.18", + "@esbuild/freebsd-arm64": "0.17.18", + "@esbuild/freebsd-x64": "0.17.18", + "@esbuild/linux-arm": "0.17.18", + "@esbuild/linux-arm64": "0.17.18", + "@esbuild/linux-ia32": "0.17.18", + "@esbuild/linux-loong64": "0.17.18", + "@esbuild/linux-mips64el": "0.17.18", + "@esbuild/linux-ppc64": "0.17.18", + "@esbuild/linux-riscv64": "0.17.18", + "@esbuild/linux-s390x": "0.17.18", + "@esbuild/linux-x64": "0.17.18", + "@esbuild/netbsd-x64": "0.17.18", + "@esbuild/openbsd-x64": "0.17.18", + "@esbuild/sunos-x64": "0.17.18", + "@esbuild/win32-arm64": "0.17.18", + "@esbuild/win32-ia32": "0.17.18", + "@esbuild/win32-x64": "0.17.18" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.12" + "node": ">=12" } }, - "node_modules/deep-is": { - "version": "0.1.4", + "node_modules/esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", "optional": true, - "peer": true + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.4.0" + "node": ">=12" } }, - "node_modules/dir-glob": { - "version": "3.0.1", + "node_modules/esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/domexception": { - "version": "4.0.0", + "node_modules/esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", "optional": true, - "peer": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, + "os": [ + "netbsd" + ], "engines": { "node": ">=12" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/entities": { - "version": "4.4.0", + "node_modules/esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", "optional": true, - "peer": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=12" } }, - "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "node_modules/esbuild-register": { + "version": "3.3.3", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "peerDependencies": { + "esbuild": ">=0.12 <1" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/esbuild": { - "version": "0.15.9", + "node_modules/esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "cpu": [ + "ia32" + ], "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.9", - "@esbuild/linux-loong64": "0.15.9", - "esbuild-android-64": "0.15.9", - "esbuild-android-arm64": "0.15.9", - "esbuild-darwin-64": "0.15.9", - "esbuild-darwin-arm64": "0.15.9", - "esbuild-freebsd-64": "0.15.9", - "esbuild-freebsd-arm64": "0.15.9", - "esbuild-linux-32": "0.15.9", - "esbuild-linux-64": "0.15.9", - "esbuild-linux-arm": "0.15.9", - "esbuild-linux-arm64": "0.15.9", - "esbuild-linux-mips64le": "0.15.9", - "esbuild-linux-ppc64le": "0.15.9", - "esbuild-linux-riscv64": "0.15.9", - "esbuild-linux-s390x": "0.15.9", - "esbuild-netbsd-64": "0.15.9", - "esbuild-openbsd-64": "0.15.9", - "esbuild-sunos-64": "0.15.9", - "esbuild-windows-32": "0.15.9", - "esbuild-windows-64": "0.15.9", - "esbuild-windows-arm64": "0.15.9" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.9", + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "linux" + "win32" ], "engines": { "node": ">=12" } }, - "node_modules/esbuild-register": { - "version": "3.3.3", + "node_modules/esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "peerDependencies": { - "esbuild": ">=0.12 <1" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, "node_modules/escalade": { @@ -1172,8 +1933,6 @@ "version": "2.0.3", "dev": true, "license": "BSD-2-Clause", - "optional": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -1235,6 +1994,12 @@ "node": ">=0.10.0" } }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "node_modules/fast-glob": { "version": "3.2.12", "dev": true, @@ -1318,6 +2083,20 @@ "dev": true, "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "dev": true, @@ -1361,8 +2140,9 @@ }, "node_modules/get-func-name": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -1896,9 +2676,9 @@ } }, "node_modules/is-node-process": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.0.1.tgz", - "integrity": "sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", "dev": true }, "node_modules/is-number": { @@ -2070,6 +2850,15 @@ "node": ">=0.10.0" } }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/js-yaml": { "version": "4.1.0", "dev": true, @@ -2170,6 +2959,12 @@ "node": ">=12" } }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/levn": { "version": "0.3.0", "dev": true, @@ -2198,17 +2993,19 @@ "license": "MIT" }, "node_modules/load-tsconfig": { - "version": "0.2.3", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/local-pkg": { - "version": "0.4.2", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" }, @@ -2243,22 +3040,59 @@ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" }, "engines": { "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12" } }, - "node_modules/loupe": { - "version": "2.3.4", + "node_modules/md5-hex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", + "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", "dev": true, - "license": "MIT", "dependencies": { - "get-func-name": "^2.0.0" + "blueimp-md5": "^2.10.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/merge-stream": { @@ -2324,15 +3158,27 @@ "node": "*" } }, + "node_modules/mlly": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.0.tgz", + "integrity": "sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==", + "dev": true, + "dependencies": { + "acorn": "^8.8.2", + "pathe": "^1.1.0", + "pkg-types": "^1.0.2", + "ufo": "^1.1.1" + } + }, "node_modules/ms": { "version": "2.1.2", "dev": true, "license": "MIT" }, "node_modules/msw": { - "version": "0.47.4", - "resolved": "https://registry.npmjs.org/msw/-/msw-0.47.4.tgz", - "integrity": "sha512-Psftt8Yfl0+l+qqg9OlmKEsxF8S/vtda0CmlR6y8wTaWrMMzuCDa55n2hEGC0ZRDwuV6FFWc/4CjoDsBpATKBw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/msw/-/msw-1.2.1.tgz", + "integrity": "sha512-bF7qWJQSmKn6bwGYVPXOxhexTCGD5oJSZg8yt8IBClxvo3Dx/1W0zqE1nX9BSWmzRsCKWfeGWcB/vpqV6aclpw==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -2345,15 +3191,14 @@ "chokidar": "^3.4.2", "cookie": "^0.4.2", "graphql": "^15.0.0 || ^16.0.0", - "headers-polyfill": "^3.1.0", + "headers-polyfill": "^3.1.2", "inquirer": "^8.2.0", - "is-node-process": "^1.0.1", + "is-node-process": "^1.2.0", "js-levenshtein": "^1.1.6", "node-fetch": "^2.6.7", - "outvariant": "^1.3.0", + "outvariant": "^1.4.0", "path-to-regexp": "^6.2.0", - "statuses": "^2.0.0", - "strict-event-emitter": "^0.2.6", + "strict-event-emitter": "^0.4.3", "type-fest": "^2.19.0", "yargs": "^17.3.1" }, @@ -2368,7 +3213,7 @@ "url": "https://opencollective.com/mswjs" }, "peerDependencies": { - "typescript": ">= 4.2.x <= 4.8.x" + "typescript": ">= 4.4.x <= 5.0.x" }, "peerDependenciesMeta": { "typescript": { @@ -2376,6 +3221,12 @@ } } }, + "node_modules/msw/node_modules/strict-event-emitter": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", + "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==", + "dev": true + }, "node_modules/msw/node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -2582,11 +3433,26 @@ } }, "node_modules/outvariant": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.3.0.tgz", - "integrity": "sha512-yeWM9k6UPfG/nzxdaPlJkB2p08hCg4xP6Lx99F+vP8YF7xyZVfTmJjrrNalkmzudD4WFvNLVudQikqUmF8zhVQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.0.tgz", + "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", "dev": true }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse-cache-control": { "version": "1.0.1", "dev": true @@ -2639,10 +3505,17 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz", + "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==", + "dev": true + }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -2671,6 +3544,17 @@ "node": ">= 6" } }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, "node_modules/postcss": { "version": "8.4.14", "dev": true, @@ -2745,6 +3629,32 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "dev": true, @@ -2813,6 +3723,12 @@ ], "license": "MIT" }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, "node_modules/readable-stream": { "version": "2.3.7", "dev": true, @@ -3008,6 +3924,21 @@ "node": ">=v12.22.7" } }, + "node_modules/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/set-cookie-parser": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", @@ -3046,6 +3977,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "node_modules/signal-exit": { "version": "3.0.7", "dev": true, @@ -3077,14 +4014,17 @@ "node": ">=0.10.0" } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", + "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==", + "dev": true }, "node_modules/strict-event-emitter": { "version": "0.2.7", @@ -3166,12 +4106,12 @@ } }, "node_modules/strip-literal": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.2.tgz", - "integrity": "sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz", + "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", "dev": true, "dependencies": { - "acorn": "^8.8.0" + "acorn": "^8.8.2" }, "funding": { "url": "https://github.com/sponsors/antfu" @@ -3310,25 +4250,34 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, + "node_modules/time-zone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", + "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/tinybench": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.3.0.tgz", - "integrity": "sha512-zs1gMVBwyyG2QbVchYIbnabRhMOCGvrwZz/q+SV+LIMa9q5YDQZi2kkI6ZRqV2Bz7ba1uvrc7ieUoE4KWnGeKg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", + "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", "dev": true }, "node_modules/tinypool": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.0.tgz", - "integrity": "sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz", + "integrity": "sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==", "dev": true, "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz", - "integrity": "sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.0.tgz", + "integrity": "sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==", "dev": true, "engines": { "node": ">=14.0.0" @@ -3410,21 +4359,22 @@ "dev": true }, "node_modules/tsup": { - "version": "6.2.3", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-6.7.0.tgz", + "integrity": "sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==", "dev": true, - "license": "MIT", "dependencies": { - "bundle-require": "^3.1.0", + "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", - "esbuild": "^0.15.1", + "esbuild": "^0.17.6", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^3.0.1", "resolve-from": "^5.0.0", - "rollup": "^2.74.1", + "rollup": "^3.2.5", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" @@ -3434,12 +4384,12 @@ "tsup-node": "dist/cli-node.js" }, "engines": { - "node": ">=14" + "node": ">=14.18" }, "peerDependencies": { "@swc/core": "^1", "postcss": "^8.4.12", - "typescript": "^4.1.0" + "typescript": ">=4.1.0" }, "peerDependenciesMeta": { "@swc/core": { @@ -3453,6 +4403,22 @@ } } }, + "node_modules/tsup/node_modules/rollup": { + "version": "3.21.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.6.tgz", + "integrity": "sha512-SXIICxvxQxR3D4dp/3LDHZIJPC8a4anKMHd4E3Jiz2/JnY+2bEjqrOokAauc5ShGVNFHlEFjBXAXlaxkJqIqSg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/tsup/node_modules/source-map": { "version": "0.8.0-beta.0", "dev": true, @@ -3502,8 +4468,9 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -3526,18 +4493,24 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=12.20" } }, + "node_modules/ufo": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz", + "integrity": "sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==", + "dev": true + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -3641,6 +4614,45 @@ } } }, + "node_modules/vite-node": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.31.0.tgz", + "integrity": "sha512-8x1x1LNuPvE2vIvkSB7c1mApX5oqlgsxzHQesYF7l5n1gKrEmrClIiZuOFbFDQcjLsmcWSwwmrWrcGWm9Fxc/g==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.2.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/vite/node_modules/esbuild": { "version": "0.14.54", "dev": true, @@ -3692,38 +4704,55 @@ } }, "node_modules/vitest": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.23.4.tgz", - "integrity": "sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.31.0.tgz", + "integrity": "sha512-JwWJS9p3GU9GxkG7eBSmr4Q4x4bvVBSswaCFf1PBNHiPx00obfhHRJfgHcnI0ffn+NMlIh9QGvG75FlaIBdKGA==", "dev": true, "dependencies": { - "@types/chai": "^4.3.3", + "@types/chai": "^4.3.4", "@types/chai-subset": "^1.3.3", "@types/node": "*", - "chai": "^4.3.6", + "@vitest/expect": "0.31.0", + "@vitest/runner": "0.31.0", + "@vitest/snapshot": "0.31.0", + "@vitest/spy": "0.31.0", + "@vitest/utils": "0.31.0", + "acorn": "^8.8.2", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.7", + "concordance": "^5.0.4", "debug": "^4.3.4", - "local-pkg": "^0.4.2", - "strip-literal": "^0.4.1", - "tinybench": "^2.1.5", - "tinypool": "^0.3.0", - "tinyspy": "^1.0.2", - "vite": "^2.9.12 || ^3.0.0-0" + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.2", + "strip-literal": "^1.0.1", + "tinybench": "^2.4.0", + "tinypool": "^0.5.0", + "vite": "^3.0.0 || ^4.0.0", + "vite-node": "0.31.0", + "why-is-node-running": "^2.2.2" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": ">=v14.16.0" + "node": ">=v14.18.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", - "jsdom": "*" + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" }, "peerDependenciesMeta": { "@edge-runtime/vm": { @@ -3740,9 +4769,27 @@ }, "jsdom": { "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true } } }, + "node_modules/vitest/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "dev": true, @@ -3795,6 +4842,15 @@ "node": ">=12" } }, + "node_modules/well-known-symbols": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", + "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/whatwg-encoding": { "version": "2.0.0", "dev": true, @@ -3878,6 +4934,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "dev": true, @@ -3958,6 +5030,12 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/yaml": { "version": "1.10.2", "dev": true, @@ -3993,6 +5071,18 @@ "node": ">=12" } }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/z-schema": { "version": "5.0.2", "dev": true, @@ -4019,9 +5109,9 @@ "optional": true }, "node_modules/zod": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.19.1.tgz", - "integrity": "sha512-LYjZsEDhCdYET9ikFu6dVPGp2YH9DegXjdJToSzD9rO6fy4qiRYFoyEYwps88OseJlPyl2NOe2iJuhEhL7IpEA==", + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", "dev": true, "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -4039,25 +5129,185 @@ "js-yaml": "^4.1.0" } }, - "@apidevtools/openapi-schemas": { - "version": "2.1.0", - "dev": true + "@apidevtools/openapi-schemas": { + "version": "2.1.0", + "dev": true + }, + "@apidevtools/swagger-methods": { + "version": "3.0.2", + "dev": true + }, + "@apidevtools/swagger-parser": { + "version": "10.0.3", + "dev": true, + "requires": { + "@apidevtools/json-schema-ref-parser": "^9.0.6", + "@apidevtools/openapi-schemas": "^2.0.4", + "@apidevtools/swagger-methods": "^3.0.2", + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "z-schema": "^5.0.1" + } + }, + "@esbuild/android-arm": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz", + "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz", + "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz", + "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz", + "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz", + "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz", + "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz", + "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz", + "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz", + "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz", + "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz", + "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz", + "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz", + "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz", + "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz", + "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz", + "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz", + "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz", + "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz", + "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==", + "dev": true, + "optional": true }, - "@apidevtools/swagger-methods": { - "version": "3.0.2", - "dev": true + "@esbuild/win32-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz", + "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==", + "dev": true, + "optional": true }, - "@apidevtools/swagger-parser": { - "version": "10.0.3", + "@esbuild/win32-ia32": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz", + "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==", "dev": true, - "requires": { - "@apidevtools/json-schema-ref-parser": "^9.0.6", - "@apidevtools/openapi-schemas": "^2.0.4", - "@apidevtools/swagger-methods": "^3.0.2", - "@jsdevtools/ono": "^7.1.3", - "call-me-maybe": "^1.0.1", - "z-schema": "^5.0.1" - } + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz", + "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==", + "dev": true, + "optional": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "@jsdevtools/ono": { "version": "7.1.3", @@ -4122,7 +5372,9 @@ "peer": true }, "@types/chai": { - "version": "4.3.3", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", "dev": true }, "@types/chai-subset": { @@ -4194,6 +5446,60 @@ "@types/node": "*" } }, + "@vitest/expect": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.31.0.tgz", + "integrity": "sha512-Jlm8ZTyp6vMY9iz9Ny9a0BHnCG4fqBa8neCF6Pk/c/6vkUk49Ls6UBlgGAU82QnzzoaUs9E/mUhq/eq9uMOv/g==", + "dev": true, + "requires": { + "@vitest/spy": "0.31.0", + "@vitest/utils": "0.31.0", + "chai": "^4.3.7" + } + }, + "@vitest/runner": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.31.0.tgz", + "integrity": "sha512-H1OE+Ly7JFeBwnpHTrKyCNm/oZgr+16N4qIlzzqSG/YRQDATBYmJb/KUn3GrZaiQQyL7GwpNHVZxSQd6juLCgw==", + "dev": true, + "requires": { + "@vitest/utils": "0.31.0", + "concordance": "^5.0.4", + "p-limit": "^4.0.0", + "pathe": "^1.1.0" + } + }, + "@vitest/snapshot": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.31.0.tgz", + "integrity": "sha512-5dTXhbHnyUMTMOujZPB0wjFjQ6q5x9c8TvAsSPUNKjp1tVU7i9pbqcKPqntyu2oXtmVxKbuHCqrOd+Ft60r4tg==", + "dev": true, + "requires": { + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "pretty-format": "^27.5.1" + } + }, + "@vitest/spy": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.31.0.tgz", + "integrity": "sha512-IzCEQ85RN26GqjQNkYahgVLLkULOxOm5H/t364LG0JYb3Apg0PsYCHLBYGA006+SVRMWhQvHlBBCyuByAMFmkg==", + "dev": true, + "requires": { + "tinyspy": "^2.1.0" + } + }, + "@vitest/utils": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.31.0.tgz", + "integrity": "sha512-kahaRyLX7GS1urekRXN2752X4gIgOGVX4Wo8eDUGUkTWlGpXzf5ZS6N9RUUS+Re3XEE8nVGqNyxkSxF5HXlGhQ==", + "dev": true, + "requires": { + "concordance": "^5.0.4", + "loupe": "^2.3.6", + "pretty-format": "^27.5.1" + } + }, "@xmldom/xmldom": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.3.tgz", @@ -4214,7 +5520,9 @@ "peer": true }, "acorn": { - "version": "8.8.0", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true }, "acorn-globals": { @@ -4308,6 +5616,8 @@ }, "assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "asynckit": { @@ -4358,6 +5668,12 @@ } } }, + "blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "dev": true, @@ -4394,10 +5710,12 @@ "dev": true }, "bundle-require": { - "version": "3.1.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.0.1.tgz", + "integrity": "sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==", "dev": true, "requires": { - "load-tsconfig": "^0.2.0" + "load-tsconfig": "^0.2.3" } }, "cac": { @@ -4421,12 +5739,14 @@ "dev": true }, "chai": { - "version": "4.3.6", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", @@ -4451,6 +5771,8 @@ }, "check-error": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true }, "chokidar": { @@ -4545,6 +5867,22 @@ "typedarray": "^0.0.6" } }, + "concordance": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", + "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", + "dev": true, + "requires": { + "date-time": "^3.1.0", + "esutils": "^2.0.3", + "fast-diff": "^1.2.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.15", + "md5-hex": "^3.0.1", + "semver": "^7.3.2", + "well-known-symbols": "^2.0.0" + } + }, "cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", @@ -4623,6 +5961,15 @@ } } }, + "date-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", + "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", + "dev": true, + "requires": { + "time-zone": "^1.0.0" + } + }, "debug": { "version": "4.3.4", "dev": true, @@ -4637,7 +5984,9 @@ "peer": true }, "deep-eql": { - "version": "3.0.1", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -4744,35 +6093,137 @@ } }, "esbuild": { - "version": "0.15.9", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.9", - "@esbuild/linux-loong64": "0.15.9", - "esbuild-android-64": "0.15.9", - "esbuild-android-arm64": "0.15.9", - "esbuild-darwin-64": "0.15.9", - "esbuild-darwin-arm64": "0.15.9", - "esbuild-freebsd-64": "0.15.9", - "esbuild-freebsd-arm64": "0.15.9", - "esbuild-linux-32": "0.15.9", - "esbuild-linux-64": "0.15.9", - "esbuild-linux-arm": "0.15.9", - "esbuild-linux-arm64": "0.15.9", - "esbuild-linux-mips64le": "0.15.9", - "esbuild-linux-ppc64le": "0.15.9", - "esbuild-linux-riscv64": "0.15.9", - "esbuild-linux-s390x": "0.15.9", - "esbuild-netbsd-64": "0.15.9", - "esbuild-openbsd-64": "0.15.9", - "esbuild-sunos-64": "0.15.9", - "esbuild-windows-32": "0.15.9", - "esbuild-windows-64": "0.15.9", - "esbuild-windows-arm64": "0.15.9" - } - }, - "esbuild-linux-64": { - "version": "0.15.9", + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz", + "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.18", + "@esbuild/android-arm64": "0.17.18", + "@esbuild/android-x64": "0.17.18", + "@esbuild/darwin-arm64": "0.17.18", + "@esbuild/darwin-x64": "0.17.18", + "@esbuild/freebsd-arm64": "0.17.18", + "@esbuild/freebsd-x64": "0.17.18", + "@esbuild/linux-arm": "0.17.18", + "@esbuild/linux-arm64": "0.17.18", + "@esbuild/linux-ia32": "0.17.18", + "@esbuild/linux-loong64": "0.17.18", + "@esbuild/linux-mips64el": "0.17.18", + "@esbuild/linux-ppc64": "0.17.18", + "@esbuild/linux-riscv64": "0.17.18", + "@esbuild/linux-s390x": "0.17.18", + "@esbuild/linux-x64": "0.17.18", + "@esbuild/netbsd-x64": "0.17.18", + "@esbuild/openbsd-x64": "0.17.18", + "@esbuild/sunos-x64": "0.17.18", + "@esbuild/win32-arm64": "0.17.18", + "@esbuild/win32-ia32": "0.17.18", + "@esbuild/win32-x64": "0.17.18" + } + }, + "esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", "dev": true, "optional": true }, @@ -4781,6 +6232,34 @@ "dev": true, "requires": {} }, + "esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "dev": true, + "optional": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -4820,9 +6299,7 @@ }, "esutils": { "version": "2.0.3", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "events": { "version": "3.3.0", @@ -4867,6 +6344,12 @@ } } }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-glob": { "version": "3.2.12", "dev": true, @@ -4929,6 +6412,13 @@ "version": "1.0.0", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "dev": true @@ -4959,6 +6449,8 @@ }, "get-func-name": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true }, "get-intrinsic": { @@ -5306,9 +6798,9 @@ "dev": true }, "is-node-process": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.0.1.tgz", - "integrity": "sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", "dev": true }, "is-number": { @@ -5417,6 +6909,12 @@ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", "dev": true }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true + }, "js-yaml": { "version": "4.1.0", "dev": true, @@ -5491,6 +6989,12 @@ } } }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "levn": { "version": "0.3.0", "dev": true, @@ -5510,11 +7014,15 @@ "dev": true }, "load-tsconfig": { - "version": "0.2.3", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", "dev": true }, "local-pkg": { - "version": "0.4.2", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", "dev": true }, "lodash": { @@ -5546,12 +7054,41 @@ } }, "loupe": { - "version": "2.3.4", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "dev": true, "requires": { "get-func-name": "^2.0.0" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "md5-hex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", + "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", + "dev": true, + "requires": { + "blueimp-md5": "^2.10.0" + } + }, "merge-stream": { "version": "2.0.0", "dev": true @@ -5590,14 +7127,26 @@ "brace-expansion": "^1.1.7" } }, + "mlly": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.0.tgz", + "integrity": "sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==", + "dev": true, + "requires": { + "acorn": "^8.8.2", + "pathe": "^1.1.0", + "pkg-types": "^1.0.2", + "ufo": "^1.1.1" + } + }, "ms": { "version": "2.1.2", "dev": true }, "msw": { - "version": "0.47.4", - "resolved": "https://registry.npmjs.org/msw/-/msw-0.47.4.tgz", - "integrity": "sha512-Psftt8Yfl0+l+qqg9OlmKEsxF8S/vtda0CmlR6y8wTaWrMMzuCDa55n2hEGC0ZRDwuV6FFWc/4CjoDsBpATKBw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/msw/-/msw-1.2.1.tgz", + "integrity": "sha512-bF7qWJQSmKn6bwGYVPXOxhexTCGD5oJSZg8yt8IBClxvo3Dx/1W0zqE1nX9BSWmzRsCKWfeGWcB/vpqV6aclpw==", "dev": true, "requires": { "@mswjs/cookies": "^0.2.2", @@ -5609,19 +7158,24 @@ "chokidar": "^3.4.2", "cookie": "^0.4.2", "graphql": "^15.0.0 || ^16.0.0", - "headers-polyfill": "^3.1.0", + "headers-polyfill": "^3.1.2", "inquirer": "^8.2.0", - "is-node-process": "^1.0.1", + "is-node-process": "^1.2.0", "js-levenshtein": "^1.1.6", "node-fetch": "^2.6.7", - "outvariant": "^1.3.0", + "outvariant": "^1.4.0", "path-to-regexp": "^6.2.0", - "statuses": "^2.0.0", - "strict-event-emitter": "^0.2.6", + "strict-event-emitter": "^0.4.3", "type-fest": "^2.19.0", "yargs": "^17.3.1" }, "dependencies": { + "strict-event-emitter": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", + "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==", + "dev": true + }, "type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -5757,11 +7311,20 @@ "dev": true }, "outvariant": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.3.0.tgz", - "integrity": "sha512-yeWM9k6UPfG/nzxdaPlJkB2p08hCg4xP6Lx99F+vP8YF7xyZVfTmJjrrNalkmzudD4WFvNLVudQikqUmF8zhVQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.0.tgz", + "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", "dev": true }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, "parse-cache-control": { "version": "1.0.1", "dev": true @@ -5797,8 +7360,16 @@ "version": "4.0.0", "dev": true }, + "pathe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz", + "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==", + "dev": true + }, "pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "picocolors": { @@ -5813,6 +7384,17 @@ "version": "4.0.5", "dev": true }, + "pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "requires": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, "postcss": { "version": "8.4.14", "dev": true, @@ -5840,6 +7422,25 @@ "version": "2.7.1", "dev": true }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "process-nextick-args": { "version": "2.0.1", "dev": true @@ -5878,6 +7479,12 @@ "version": "1.2.3", "dev": true }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, "readable-stream": { "version": "2.3.7", "dev": true, @@ -6005,6 +7612,15 @@ "xmlchars": "^2.2.0" } }, + "semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "set-cookie-parser": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", @@ -6031,6 +7647,12 @@ "object-inspect": "^1.9.0" } }, + "siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "signal-exit": { "version": "3.0.7", "dev": true @@ -6049,10 +7671,16 @@ "version": "1.0.2", "dev": true }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "std-env": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", + "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==", "dev": true }, "strict-event-emitter": { @@ -6118,12 +7746,12 @@ "dev": true }, "strip-literal": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.2.tgz", - "integrity": "sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz", + "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", "dev": true, "requires": { - "acorn": "^8.8.0" + "acorn": "^8.8.2" } }, "sucrase": { @@ -6223,22 +7851,28 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, + "time-zone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", + "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", + "dev": true + }, "tinybench": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.3.0.tgz", - "integrity": "sha512-zs1gMVBwyyG2QbVchYIbnabRhMOCGvrwZz/q+SV+LIMa9q5YDQZi2kkI6ZRqV2Bz7ba1uvrc7ieUoE4KWnGeKg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", + "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", "dev": true }, "tinypool": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.0.tgz", - "integrity": "sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz", + "integrity": "sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==", "dev": true }, "tinyspy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz", - "integrity": "sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.0.tgz", + "integrity": "sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==", "dev": true }, "tmp": { @@ -6300,25 +7934,36 @@ "dev": true }, "tsup": { - "version": "6.2.3", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-6.7.0.tgz", + "integrity": "sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==", "dev": true, "requires": { - "bundle-require": "^3.1.0", + "bundle-require": "^4.0.0", "cac": "^6.7.12", "chokidar": "^3.5.1", "debug": "^4.3.1", - "esbuild": "^0.15.1", + "esbuild": "^0.17.6", "execa": "^5.0.0", "globby": "^11.0.3", "joycon": "^3.0.1", "postcss-load-config": "^3.0.1", "resolve-from": "^5.0.0", - "rollup": "^2.74.1", + "rollup": "^3.2.5", "source-map": "0.8.0-beta.0", "sucrase": "^3.20.3", "tree-kill": "^1.2.2" }, "dependencies": { + "rollup": { + "version": "3.21.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.6.tgz", + "integrity": "sha512-SXIICxvxQxR3D4dp/3LDHZIJPC8a4anKMHd4E3Jiz2/JnY+2bEjqrOokAauc5ShGVNFHlEFjBXAXlaxkJqIqSg==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, "source-map": { "version": "0.8.0-beta.0", "dev": true, @@ -6359,6 +8004,8 @@ }, "type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-fest": { @@ -6372,9 +8019,15 @@ "dev": true }, "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true + }, + "ufo": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz", + "integrity": "sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==", "dev": true }, "unbox-primitive": { @@ -6438,6 +8091,13 @@ "rollup": "^2.75.6" }, "dependencies": { + "@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "dev": true, + "optional": true + }, "esbuild": { "version": "0.14.54", "dev": true, @@ -6472,23 +8132,59 @@ } } }, + "vite-node": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.31.0.tgz", + "integrity": "sha512-8x1x1LNuPvE2vIvkSB7c1mApX5oqlgsxzHQesYF7l5n1gKrEmrClIiZuOFbFDQcjLsmcWSwwmrWrcGWm9Fxc/g==", + "dev": true, + "requires": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.2.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0" + } + }, "vitest": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.23.4.tgz", - "integrity": "sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.31.0.tgz", + "integrity": "sha512-JwWJS9p3GU9GxkG7eBSmr4Q4x4bvVBSswaCFf1PBNHiPx00obfhHRJfgHcnI0ffn+NMlIh9QGvG75FlaIBdKGA==", "dev": true, "requires": { - "@types/chai": "^4.3.3", + "@types/chai": "^4.3.4", "@types/chai-subset": "^1.3.3", "@types/node": "*", - "chai": "^4.3.6", + "@vitest/expect": "0.31.0", + "@vitest/runner": "0.31.0", + "@vitest/snapshot": "0.31.0", + "@vitest/spy": "0.31.0", + "@vitest/utils": "0.31.0", + "acorn": "^8.8.2", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.7", + "concordance": "^5.0.4", "debug": "^4.3.4", - "local-pkg": "^0.4.2", - "strip-literal": "^0.4.1", - "tinybench": "^2.1.5", - "tinypool": "^0.3.0", - "tinyspy": "^1.0.2", - "vite": "^2.9.12 || ^3.0.0-0" + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.2", + "strip-literal": "^1.0.1", + "tinybench": "^2.4.0", + "tinypool": "^0.5.0", + "vite": "^3.0.0 || ^4.0.0", + "vite-node": "0.31.0", + "why-is-node-running": "^2.2.2" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + } } }, "w3c-hr-time": { @@ -6532,6 +8228,12 @@ "version": "7.0.0", "dev": true }, + "well-known-symbols": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", + "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", + "dev": true + }, "whatwg-encoding": { "version": "2.0.0", "dev": true, @@ -6591,6 +8293,16 @@ "is-typed-array": "^1.1.9" } }, + "why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "requires": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + } + }, "word-wrap": { "version": "1.2.3", "dev": true, @@ -6637,6 +8349,12 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yaml": { "version": "1.10.2", "dev": true @@ -6662,6 +8380,12 @@ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + }, "z-schema": { "version": "5.0.2", "dev": true, @@ -6680,9 +8404,9 @@ } }, "zod": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.19.1.tgz", - "integrity": "sha512-LYjZsEDhCdYET9ikFu6dVPGp2YH9DegXjdJToSzD9rO6fy4qiRYFoyEYwps88OseJlPyl2NOe2iJuhEhL7IpEA==", + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", "dev": true } } diff --git a/package.json b/package.json index 2edb281..f72b4cb 100644 --- a/package.json +++ b/package.json @@ -47,22 +47,22 @@ "author": "", "license": "MIT", "optionalDependencies": { - "zod": "^3.19.1" + "zod": "^3.20" }, "devDependencies": { "@types/node": "^18.7.20", "esbuild-register": "^3.3.3", "happy-dom": "^6.0.4", - "msw": "^0.47.4", + "msw": "^1.2.1", "openapi-types": "^12.0.2", "prettier": "2.7.1", "swagger-parser": "^10.0.3", "ts-pattern": "^4.0.5", "tsafe": "^1.1.1", - "tsup": "^6.2.3", + "tsup": "^6.7.0", "type-fest": "^3.1.0", - "typescript": "^4.8.4", - "vitest": "^0.23.4", - "zod": "^3.19.1" + "typescript": "^5.0.4", + "vitest": "^0.31.0", + "zod": "^3.21.4" } } diff --git a/tests/__snapshots__/know-properties.test.ts.snap b/tests/__snapshots__/know-properties.test.ts.snap index e91256a..d2acf1c 100644 --- a/tests/__snapshots__/know-properties.test.ts.snap +++ b/tests/__snapshots__/know-properties.test.ts.snap @@ -48,6 +48,7 @@ exports[`Known properties > Type number should contain only known properties 1`] exports[`Known properties > Type object should contain only known properties 1`] = ` [ + "additionalProperties", "description", "properties", "required",