From 4193e13c7caeed3e7da33ef86856cb23725d7943 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Sun, 29 Dec 2024 22:36:48 +0000 Subject: [PATCH 01/19] chore: update the generated content types in the playground --- playground/types/generated/contentTypes.d.ts | 1013 +++++++++--------- 1 file changed, 518 insertions(+), 495 deletions(-) diff --git a/playground/types/generated/contentTypes.d.ts b/playground/types/generated/contentTypes.d.ts index 618025e..b053149 100644 --- a/playground/types/generated/contentTypes.d.ts +++ b/playground/types/generated/contentTypes.d.ts @@ -1,62 +1,116 @@ -import type { Struct, Schema } from '@strapi/strapi'; +import type { Schema, Struct } from '@strapi/strapi'; -export interface ApiHomeHome extends Struct.SingleTypeSchema { - collectionName: 'homes'; +export interface AdminApiToken extends Struct.CollectionTypeSchema { + collectionName: 'strapi_api_tokens'; info: { - singularName: 'home'; - pluralName: 'homes'; - displayName: 'Home'; description: ''; + displayName: 'Api Token'; + name: 'Api Token'; + pluralName: 'api-tokens'; + singularName: 'api-token'; }; options: { draftAndPublish: false; }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; attributes: { - title: Schema.Attribute.String; - slug: Schema.Attribute.UID<'title'>; + accessKey: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; + description: Schema.Attribute.String & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }> & + Schema.Attribute.DefaultTo<''>; + expiresAt: Schema.Attribute.DateTime; + lastUsedAt: Schema.Attribute.DateTime; + lifespan: Schema.Attribute.BigInteger; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation<'oneToMany', 'admin::api-token'> & + Schema.Attribute.Private; + name: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Unique & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + permissions: Schema.Attribute.Relation< + 'oneToMany', + 'admin::api-token-permission' + >; + publishedAt: Schema.Attribute.DateTime; + type: Schema.Attribute.Enumeration<['read-only', 'full-access', 'custom']> & + Schema.Attribute.Required & + Schema.Attribute.DefaultTo<'read-only'>; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation<'oneToMany', 'api::home.home'>; }; } -export interface ApiPagePage extends Struct.CollectionTypeSchema { - collectionName: 'pages'; +export interface AdminApiTokenPermission extends Struct.CollectionTypeSchema { + collectionName: 'strapi_api_token_permissions'; info: { - singularName: 'page'; - pluralName: 'pages'; - displayName: 'Page'; + description: ''; + displayName: 'API Token Permission'; + name: 'API Token Permission'; + pluralName: 'api-token-permissions'; + singularName: 'api-token-permission'; }; options: { draftAndPublish: false; }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; attributes: { - title: Schema.Attribute.String & Schema.Attribute.Required; + action: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation< + 'oneToMany', + 'admin::api-token-permission' + > & + Schema.Attribute.Private; + publishedAt: Schema.Attribute.DateTime; + token: Schema.Attribute.Relation<'manyToOne', 'admin::api-token'>; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation<'oneToMany', 'api::page.page'>; }; } -export interface PluginUploadFile extends Struct.CollectionTypeSchema { - collectionName: 'files'; +export interface AdminPermission extends Struct.CollectionTypeSchema { + collectionName: 'admin_permissions'; info: { - singularName: 'file'; - pluralName: 'files'; - displayName: 'File'; description: ''; + displayName: 'Permission'; + name: 'Permission'; + pluralName: 'permissions'; + singularName: 'permission'; }; options: { draftAndPublish: false; @@ -70,50 +124,40 @@ export interface PluginUploadFile extends Struct.CollectionTypeSchema { }; }; attributes: { - name: Schema.Attribute.String & Schema.Attribute.Required; - alternativeText: Schema.Attribute.String; - caption: Schema.Attribute.String; - width: Schema.Attribute.Integer; - height: Schema.Attribute.Integer; - formats: Schema.Attribute.JSON; - hash: Schema.Attribute.String & Schema.Attribute.Required; - ext: Schema.Attribute.String; - mime: Schema.Attribute.String & Schema.Attribute.Required; - size: Schema.Attribute.Decimal & Schema.Attribute.Required; - url: Schema.Attribute.String & Schema.Attribute.Required; - previewUrl: Schema.Attribute.String; - provider: Schema.Attribute.String & Schema.Attribute.Required; - provider_metadata: Schema.Attribute.JSON; - related: Schema.Attribute.Relation<'morphToMany'>; - folder: Schema.Attribute.Relation<'manyToOne', 'plugin::upload.folder'> & - Schema.Attribute.Private; - folderPath: Schema.Attribute.String & + action: Schema.Attribute.String & Schema.Attribute.Required & - Schema.Attribute.Private & Schema.Attribute.SetMinMaxLength<{ minLength: 1; }>; + actionParameters: Schema.Attribute.JSON & Schema.Attribute.DefaultTo<{}>; + conditions: Schema.Attribute.JSON & Schema.Attribute.DefaultTo<[]>; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation<'oneToMany', 'admin::permission'> & + Schema.Attribute.Private; + properties: Schema.Attribute.JSON & Schema.Attribute.DefaultTo<{}>; + publishedAt: Schema.Attribute.DateTime; + role: Schema.Attribute.Relation<'manyToOne', 'admin::role'>; + subject: Schema.Attribute.String & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::upload.file' - >; }; } -export interface PluginUploadFolder extends Struct.CollectionTypeSchema { - collectionName: 'upload_folders'; +export interface AdminRole extends Struct.CollectionTypeSchema { + collectionName: 'admin_roles'; info: { - singularName: 'folder'; - pluralName: 'folders'; - displayName: 'Folder'; + description: ''; + displayName: 'Role'; + name: 'Role'; + pluralName: 'roles'; + singularName: 'role'; }; options: { draftAndPublish: false; @@ -127,45 +171,42 @@ export interface PluginUploadFolder extends Struct.CollectionTypeSchema { }; }; attributes: { - name: Schema.Attribute.String & + code: Schema.Attribute.String & Schema.Attribute.Required & + Schema.Attribute.Unique & Schema.Attribute.SetMinMaxLength<{ minLength: 1; }>; - pathId: Schema.Attribute.Integer & - Schema.Attribute.Required & - Schema.Attribute.Unique; - parent: Schema.Attribute.Relation<'manyToOne', 'plugin::upload.folder'>; - children: Schema.Attribute.Relation<'oneToMany', 'plugin::upload.folder'>; - files: Schema.Attribute.Relation<'oneToMany', 'plugin::upload.file'>; - path: Schema.Attribute.String & + createdAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + description: Schema.Attribute.String; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation<'oneToMany', 'admin::role'> & + Schema.Attribute.Private; + name: Schema.Attribute.String & Schema.Attribute.Required & + Schema.Attribute.Unique & Schema.Attribute.SetMinMaxLength<{ minLength: 1; }>; - createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; + permissions: Schema.Attribute.Relation<'oneToMany', 'admin::permission'>; publishedAt: Schema.Attribute.DateTime; - createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::upload.folder' - >; + users: Schema.Attribute.Relation<'manyToMany', 'admin::user'>; }; } -export interface PluginI18NLocale extends Struct.CollectionTypeSchema { - collectionName: 'i18n_locale'; +export interface AdminTransferToken extends Struct.CollectionTypeSchema { + collectionName: 'strapi_transfer_tokens'; info: { - singularName: 'locale'; - pluralName: 'locales'; - collectionName: 'locales'; - displayName: 'Locale'; description: ''; + displayName: 'Transfer Token'; + name: 'Transfer Token'; + pluralName: 'transfer-tokens'; + singularName: 'transfer-token'; }; options: { draftAndPublish: false; @@ -179,37 +220,54 @@ export interface PluginI18NLocale extends Struct.CollectionTypeSchema { }; }; attributes: { - name: Schema.Attribute.String & - Schema.Attribute.SetMinMax< - { - min: 1; - max: 50; - }, - number - >; - code: Schema.Attribute.String & Schema.Attribute.Unique; + accessKey: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - locale: Schema.Attribute.String; + description: Schema.Attribute.String & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }> & + Schema.Attribute.DefaultTo<''>; + expiresAt: Schema.Attribute.DateTime; + lastUsedAt: Schema.Attribute.DateTime; + lifespan: Schema.Attribute.BigInteger; + locale: Schema.Attribute.String & Schema.Attribute.Private; localizations: Schema.Attribute.Relation< 'oneToMany', - 'plugin::i18n.locale' + 'admin::transfer-token' + > & + Schema.Attribute.Private; + name: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Unique & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + permissions: Schema.Attribute.Relation< + 'oneToMany', + 'admin::transfer-token-permission' >; + publishedAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; }; } -export interface PluginContentReleasesRelease +export interface AdminTransferTokenPermission extends Struct.CollectionTypeSchema { - collectionName: 'strapi_releases'; + collectionName: 'strapi_transfer_token_permissions'; info: { - singularName: 'release'; - pluralName: 'releases'; - displayName: 'Release'; + description: ''; + displayName: 'Transfer Token Permission'; + name: 'Transfer Token Permission'; + pluralName: 'transfer-token-permissions'; + singularName: 'transfer-token-permission'; }; options: { draftAndPublish: false; @@ -223,40 +281,36 @@ export interface PluginContentReleasesRelease }; }; attributes: { - name: Schema.Attribute.String & Schema.Attribute.Required; - releasedAt: Schema.Attribute.DateTime; - scheduledAt: Schema.Attribute.DateTime; - timezone: Schema.Attribute.String; - status: Schema.Attribute.Enumeration< - ['ready', 'blocked', 'failed', 'done', 'empty'] - > & - Schema.Attribute.Required; - actions: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::content-releases.release-action' - >; - createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; + action: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + createdAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - locale: Schema.Attribute.String; + locale: Schema.Attribute.String & Schema.Attribute.Private; localizations: Schema.Attribute.Relation< 'oneToMany', - 'plugin::content-releases.release' - >; + 'admin::transfer-token-permission' + > & + Schema.Attribute.Private; + publishedAt: Schema.Attribute.DateTime; + token: Schema.Attribute.Relation<'manyToOne', 'admin::transfer-token'>; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; }; } -export interface PluginContentReleasesReleaseAction - extends Struct.CollectionTypeSchema { - collectionName: 'strapi_release_actions'; +export interface AdminUser extends Struct.CollectionTypeSchema { + collectionName: 'admin_users'; info: { - singularName: 'release-action'; - pluralName: 'release-actions'; - displayName: 'Release Action'; + description: ''; + displayName: 'User'; + name: 'User'; + pluralName: 'users'; + singularName: 'user'; }; options: { draftAndPublish: false; @@ -270,131 +324,110 @@ export interface PluginContentReleasesReleaseAction }; }; attributes: { - type: Schema.Attribute.Enumeration<['publish', 'unpublish']> & - Schema.Attribute.Required; - contentType: Schema.Attribute.String & Schema.Attribute.Required; - entryDocumentId: Schema.Attribute.String; - locale: Schema.Attribute.String; - release: Schema.Attribute.Relation< - 'manyToOne', - 'plugin::content-releases.release' - >; - isEntryValid: Schema.Attribute.Boolean; + blocked: Schema.Attribute.Boolean & + Schema.Attribute.Private & + Schema.Attribute.DefaultTo; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; + email: Schema.Attribute.Email & + Schema.Attribute.Required & + Schema.Attribute.Private & + Schema.Attribute.Unique & + Schema.Attribute.SetMinMaxLength<{ + minLength: 6; + }>; + firstname: Schema.Attribute.String & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + isActive: Schema.Attribute.Boolean & + Schema.Attribute.Private & + Schema.Attribute.DefaultTo; + lastname: Schema.Attribute.String & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation<'oneToMany', 'admin::user'> & + Schema.Attribute.Private; + password: Schema.Attribute.Password & + Schema.Attribute.Private & + Schema.Attribute.SetMinMaxLength<{ + minLength: 6; + }>; + preferedLanguage: Schema.Attribute.String; + publishedAt: Schema.Attribute.DateTime; + registrationToken: Schema.Attribute.String & Schema.Attribute.Private; + resetPasswordToken: Schema.Attribute.String & Schema.Attribute.Private; + roles: Schema.Attribute.Relation<'manyToMany', 'admin::role'> & + Schema.Attribute.Private; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - localizations: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::content-releases.release-action' - >; + username: Schema.Attribute.String; }; } -export interface PluginReviewWorkflowsWorkflow - extends Struct.CollectionTypeSchema { - collectionName: 'strapi_workflows'; +export interface ApiHomeHome extends Struct.SingleTypeSchema { + collectionName: 'homes'; info: { - name: 'Workflow'; description: ''; - singularName: 'workflow'; - pluralName: 'workflows'; - displayName: 'Workflow'; + displayName: 'Home'; + pluralName: 'homes'; + singularName: 'home'; }; options: { draftAndPublish: false; }; - pluginOptions: { - 'content-manager': { - visible: false; - }; - 'content-type-builder': { - visible: false; - }; - }; attributes: { - name: Schema.Attribute.String & - Schema.Attribute.Required & - Schema.Attribute.Unique; - stages: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::review-workflows.workflow-stage' - >; - contentTypes: Schema.Attribute.JSON & - Schema.Attribute.Required & - Schema.Attribute.DefaultTo<'[]'>; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation<'oneToMany', 'api::home.home'> & + Schema.Attribute.Private; + publishedAt: Schema.Attribute.DateTime; + slug: Schema.Attribute.UID<'title'>; + title: Schema.Attribute.String; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::review-workflows.workflow' - >; }; } -export interface PluginReviewWorkflowsWorkflowStage - extends Struct.CollectionTypeSchema { - collectionName: 'strapi_workflows_stages'; +export interface ApiPagePage extends Struct.CollectionTypeSchema { + collectionName: 'pages'; info: { - name: 'Workflow Stage'; - description: ''; - singularName: 'workflow-stage'; - pluralName: 'workflow-stages'; - displayName: 'Stages'; + displayName: 'Page'; + pluralName: 'pages'; + singularName: 'page'; }; options: { - version: '1.1.0'; draftAndPublish: false; }; - pluginOptions: { - 'content-manager': { - visible: false; - }; - 'content-type-builder': { - visible: false; - }; - }; attributes: { - name: Schema.Attribute.String; - color: Schema.Attribute.String & Schema.Attribute.DefaultTo<'#4945FF'>; - workflow: Schema.Attribute.Relation< - 'manyToOne', - 'plugin::review-workflows.workflow' - >; - permissions: Schema.Attribute.Relation<'manyToMany', 'admin::permission'>; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation<'oneToMany', 'api::page.page'> & + Schema.Attribute.Private; + publishedAt: Schema.Attribute.DateTime; + title: Schema.Attribute.String & Schema.Attribute.Required; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::review-workflows.workflow-stage' - >; }; } -export interface PluginUsersPermissionsPermission +export interface PluginContentReleasesRelease extends Struct.CollectionTypeSchema { - collectionName: 'up_permissions'; + collectionName: 'strapi_releases'; info: { - name: 'permission'; - description: ''; - singularName: 'permission'; - pluralName: 'permissions'; - displayName: 'Permission'; + displayName: 'Release'; + pluralName: 'releases'; + singularName: 'release'; }; options: { draftAndPublish: false; @@ -408,35 +441,41 @@ export interface PluginUsersPermissionsPermission }; }; attributes: { - action: Schema.Attribute.String & Schema.Attribute.Required; - role: Schema.Attribute.Relation< - 'manyToOne', - 'plugin::users-permissions.role' + actions: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::content-releases.release-action' >; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - locale: Schema.Attribute.String; + locale: Schema.Attribute.String & Schema.Attribute.Private; localizations: Schema.Attribute.Relation< 'oneToMany', - 'plugin::users-permissions.permission' - >; + 'plugin::content-releases.release' + > & + Schema.Attribute.Private; + name: Schema.Attribute.String & Schema.Attribute.Required; + publishedAt: Schema.Attribute.DateTime; + releasedAt: Schema.Attribute.DateTime; + scheduledAt: Schema.Attribute.DateTime; + status: Schema.Attribute.Enumeration< + ['ready', 'blocked', 'failed', 'done', 'empty'] + > & + Schema.Attribute.Required; + timezone: Schema.Attribute.String; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; }; } -export interface PluginUsersPermissionsRole +export interface PluginContentReleasesReleaseAction extends Struct.CollectionTypeSchema { - collectionName: 'up_roles'; + collectionName: 'strapi_release_actions'; info: { - name: 'role'; - description: ''; - singularName: 'role'; - pluralName: 'roles'; - displayName: 'Role'; + displayName: 'Release Action'; + pluralName: 'release-actions'; + singularName: 'release-action'; }; options: { draftAndPublish: false; @@ -450,99 +489,86 @@ export interface PluginUsersPermissionsRole }; }; attributes: { - name: Schema.Attribute.String & - Schema.Attribute.Required & - Schema.Attribute.SetMinMaxLength<{ - minLength: 3; - }>; - description: Schema.Attribute.String; - type: Schema.Attribute.String & Schema.Attribute.Unique; - permissions: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::users-permissions.permission' - >; - users: Schema.Attribute.Relation< - 'oneToMany', - 'plugin::users-permissions.user' - >; + contentType: Schema.Attribute.String & Schema.Attribute.Required; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - locale: Schema.Attribute.String; + entryDocumentId: Schema.Attribute.String; + isEntryValid: Schema.Attribute.Boolean; + locale: Schema.Attribute.String & Schema.Attribute.Private; localizations: Schema.Attribute.Relation< 'oneToMany', - 'plugin::users-permissions.role' + 'plugin::content-releases.release-action' + > & + Schema.Attribute.Private; + publishedAt: Schema.Attribute.DateTime; + release: Schema.Attribute.Relation< + 'manyToOne', + 'plugin::content-releases.release' >; + type: Schema.Attribute.Enumeration<['publish', 'unpublish']> & + Schema.Attribute.Required; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; }; } -export interface PluginUsersPermissionsUser - extends Struct.CollectionTypeSchema { - collectionName: 'up_users'; +export interface PluginI18NLocale extends Struct.CollectionTypeSchema { + collectionName: 'i18n_locale'; info: { - name: 'user'; + collectionName: 'locales'; description: ''; - singularName: 'user'; - pluralName: 'users'; - displayName: 'User'; + displayName: 'Locale'; + pluralName: 'locales'; + singularName: 'locale'; }; options: { - timestamps: true; draftAndPublish: false; }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; attributes: { - username: Schema.Attribute.String & - Schema.Attribute.Required & - Schema.Attribute.Unique & - Schema.Attribute.SetMinMaxLength<{ - minLength: 3; - }>; - email: Schema.Attribute.Email & - Schema.Attribute.Required & - Schema.Attribute.SetMinMaxLength<{ - minLength: 6; - }>; - provider: Schema.Attribute.String; - password: Schema.Attribute.Password & - Schema.Attribute.Private & - Schema.Attribute.SetMinMaxLength<{ - minLength: 6; - }>; - resetPasswordToken: Schema.Attribute.String & Schema.Attribute.Private; - confirmationToken: Schema.Attribute.String & Schema.Attribute.Private; - confirmed: Schema.Attribute.Boolean & Schema.Attribute.DefaultTo; - blocked: Schema.Attribute.Boolean & Schema.Attribute.DefaultTo; - role: Schema.Attribute.Relation< - 'manyToOne', - 'plugin::users-permissions.role' - >; + code: Schema.Attribute.String & Schema.Attribute.Unique; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - locale: Schema.Attribute.String; + locale: Schema.Attribute.String & Schema.Attribute.Private; localizations: Schema.Attribute.Relation< 'oneToMany', - 'plugin::users-permissions.user' - >; + 'plugin::i18n.locale' + > & + Schema.Attribute.Private; + name: Schema.Attribute.String & + Schema.Attribute.SetMinMax< + { + max: 50; + min: 1; + }, + number + >; + publishedAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; }; } -export interface AdminPermission extends Struct.CollectionTypeSchema { - collectionName: 'admin_permissions'; +export interface PluginReviewWorkflowsWorkflow + extends Struct.CollectionTypeSchema { + collectionName: 'strapi_workflows'; info: { - name: 'Permission'; description: ''; - singularName: 'permission'; - pluralName: 'permissions'; - displayName: 'Permission'; + displayName: 'Workflow'; + name: 'Workflow'; + pluralName: 'workflows'; + singularName: 'workflow'; }; options: { draftAndPublish: false; @@ -556,42 +582,49 @@ export interface AdminPermission extends Struct.CollectionTypeSchema { }; }; attributes: { - action: Schema.Attribute.String & + contentTypes: Schema.Attribute.JSON & Schema.Attribute.Required & - Schema.Attribute.SetMinMaxLength<{ - minLength: 1; - }>; - actionParameters: Schema.Attribute.JSON & Schema.Attribute.DefaultTo<{}>; - subject: Schema.Attribute.String & - Schema.Attribute.SetMinMaxLength<{ - minLength: 1; - }>; - properties: Schema.Attribute.JSON & Schema.Attribute.DefaultTo<{}>; - conditions: Schema.Attribute.JSON & Schema.Attribute.DefaultTo<[]>; - role: Schema.Attribute.Relation<'manyToOne', 'admin::role'>; + Schema.Attribute.DefaultTo<'[]'>; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::review-workflows.workflow' + > & + Schema.Attribute.Private; + name: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Unique; + publishedAt: Schema.Attribute.DateTime; + stageRequiredToPublish: Schema.Attribute.Relation< + 'oneToOne', + 'plugin::review-workflows.workflow-stage' + >; + stages: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::review-workflows.workflow-stage' + >; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation<'oneToMany', 'admin::permission'>; }; } -export interface AdminUser extends Struct.CollectionTypeSchema { - collectionName: 'admin_users'; +export interface PluginReviewWorkflowsWorkflowStage + extends Struct.CollectionTypeSchema { + collectionName: 'strapi_workflows_stages'; info: { - name: 'User'; description: ''; - singularName: 'user'; - pluralName: 'users'; - displayName: 'User'; + displayName: 'Stages'; + name: 'Workflow Stage'; + pluralName: 'workflow-stages'; + singularName: 'workflow-stage'; }; options: { draftAndPublish: false; + version: '1.1.0'; }; pluginOptions: { 'content-manager': { @@ -602,58 +635,36 @@ export interface AdminUser extends Struct.CollectionTypeSchema { }; }; attributes: { - firstname: Schema.Attribute.String & - Schema.Attribute.SetMinMaxLength<{ - minLength: 1; - }>; - lastname: Schema.Attribute.String & - Schema.Attribute.SetMinMaxLength<{ - minLength: 1; - }>; - username: Schema.Attribute.String; - email: Schema.Attribute.Email & - Schema.Attribute.Required & - Schema.Attribute.Private & - Schema.Attribute.Unique & - Schema.Attribute.SetMinMaxLength<{ - minLength: 6; - }>; - password: Schema.Attribute.Password & - Schema.Attribute.Private & - Schema.Attribute.SetMinMaxLength<{ - minLength: 6; - }>; - resetPasswordToken: Schema.Attribute.String & Schema.Attribute.Private; - registrationToken: Schema.Attribute.String & Schema.Attribute.Private; - isActive: Schema.Attribute.Boolean & - Schema.Attribute.Private & - Schema.Attribute.DefaultTo; - roles: Schema.Attribute.Relation<'manyToMany', 'admin::role'> & - Schema.Attribute.Private; - blocked: Schema.Attribute.Boolean & - Schema.Attribute.Private & - Schema.Attribute.DefaultTo; - preferedLanguage: Schema.Attribute.String; + color: Schema.Attribute.String & Schema.Attribute.DefaultTo<'#4945FF'>; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::review-workflows.workflow-stage' + > & + Schema.Attribute.Private; + name: Schema.Attribute.String; + permissions: Schema.Attribute.Relation<'manyToMany', 'admin::permission'>; + publishedAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation<'oneToMany', 'admin::user'>; + workflow: Schema.Attribute.Relation< + 'manyToOne', + 'plugin::review-workflows.workflow' + >; }; } -export interface AdminRole extends Struct.CollectionTypeSchema { - collectionName: 'admin_roles'; +export interface PluginUploadFile extends Struct.CollectionTypeSchema { + collectionName: 'files'; info: { - name: 'Role'; description: ''; - singularName: 'role'; - pluralName: 'roles'; - displayName: 'Role'; + displayName: 'File'; + pluralName: 'files'; + singularName: 'file'; }; options: { draftAndPublish: false; @@ -664,44 +675,54 @@ export interface AdminRole extends Struct.CollectionTypeSchema { }; 'content-type-builder': { visible: false; - }; - }; - attributes: { - name: Schema.Attribute.String & - Schema.Attribute.Required & - Schema.Attribute.Unique & - Schema.Attribute.SetMinMaxLength<{ - minLength: 1; - }>; - code: Schema.Attribute.String & + }; + }; + attributes: { + alternativeText: Schema.Attribute.String; + caption: Schema.Attribute.String; + createdAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + ext: Schema.Attribute.String; + folder: Schema.Attribute.Relation<'manyToOne', 'plugin::upload.folder'> & + Schema.Attribute.Private; + folderPath: Schema.Attribute.String & Schema.Attribute.Required & - Schema.Attribute.Unique & + Schema.Attribute.Private & Schema.Attribute.SetMinMaxLength<{ minLength: 1; }>; - description: Schema.Attribute.String; - users: Schema.Attribute.Relation<'manyToMany', 'admin::user'>; - permissions: Schema.Attribute.Relation<'oneToMany', 'admin::permission'>; - createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; - createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + formats: Schema.Attribute.JSON; + hash: Schema.Attribute.String & Schema.Attribute.Required; + height: Schema.Attribute.Integer; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::upload.file' + > & Schema.Attribute.Private; + mime: Schema.Attribute.String & Schema.Attribute.Required; + name: Schema.Attribute.String & Schema.Attribute.Required; + previewUrl: Schema.Attribute.String; + provider: Schema.Attribute.String & Schema.Attribute.Required; + provider_metadata: Schema.Attribute.JSON; + publishedAt: Schema.Attribute.DateTime; + related: Schema.Attribute.Relation<'morphToMany'>; + size: Schema.Attribute.Decimal & Schema.Attribute.Required; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation<'oneToMany', 'admin::role'>; + url: Schema.Attribute.String & Schema.Attribute.Required; + width: Schema.Attribute.Integer; }; } -export interface AdminApiToken extends Struct.CollectionTypeSchema { - collectionName: 'strapi_api_tokens'; +export interface PluginUploadFolder extends Struct.CollectionTypeSchema { + collectionName: 'upload_folders'; info: { - name: 'Api Token'; - singularName: 'api-token'; - pluralName: 'api-tokens'; - displayName: 'Api Token'; - description: ''; + displayName: 'Folder'; + pluralName: 'folders'; + singularName: 'folder'; }; options: { draftAndPublish: false; @@ -715,52 +736,47 @@ export interface AdminApiToken extends Struct.CollectionTypeSchema { }; }; attributes: { + children: Schema.Attribute.Relation<'oneToMany', 'plugin::upload.folder'>; + createdAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + files: Schema.Attribute.Relation<'oneToMany', 'plugin::upload.file'>; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::upload.folder' + > & + Schema.Attribute.Private; name: Schema.Attribute.String & Schema.Attribute.Required & - Schema.Attribute.Unique & Schema.Attribute.SetMinMaxLength<{ minLength: 1; }>; - description: Schema.Attribute.String & - Schema.Attribute.SetMinMaxLength<{ - minLength: 1; - }> & - Schema.Attribute.DefaultTo<''>; - type: Schema.Attribute.Enumeration<['read-only', 'full-access', 'custom']> & - Schema.Attribute.Required & - Schema.Attribute.DefaultTo<'read-only'>; - accessKey: Schema.Attribute.String & + parent: Schema.Attribute.Relation<'manyToOne', 'plugin::upload.folder'>; + path: Schema.Attribute.String & Schema.Attribute.Required & Schema.Attribute.SetMinMaxLength<{ minLength: 1; }>; - lastUsedAt: Schema.Attribute.DateTime; - permissions: Schema.Attribute.Relation< - 'oneToMany', - 'admin::api-token-permission' - >; - expiresAt: Schema.Attribute.DateTime; - lifespan: Schema.Attribute.BigInteger; - createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; + pathId: Schema.Attribute.Integer & + Schema.Attribute.Required & + Schema.Attribute.Unique; publishedAt: Schema.Attribute.DateTime; - createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation<'oneToMany', 'admin::api-token'>; }; } -export interface AdminApiTokenPermission extends Struct.CollectionTypeSchema { - collectionName: 'strapi_api_token_permissions'; +export interface PluginUsersPermissionsPermission + extends Struct.CollectionTypeSchema { + collectionName: 'up_permissions'; info: { - name: 'API Token Permission'; description: ''; - singularName: 'api-token-permission'; - pluralName: 'api-token-permissions'; - displayName: 'API Token Permission'; + displayName: 'Permission'; + name: 'permission'; + pluralName: 'permissions'; + singularName: 'permission'; }; options: { draftAndPublish: false; @@ -774,35 +790,36 @@ export interface AdminApiTokenPermission extends Struct.CollectionTypeSchema { }; }; attributes: { - action: Schema.Attribute.String & - Schema.Attribute.Required & - Schema.Attribute.SetMinMaxLength<{ - minLength: 1; - }>; - token: Schema.Attribute.Relation<'manyToOne', 'admin::api-token'>; + action: Schema.Attribute.String & Schema.Attribute.Required; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - locale: Schema.Attribute.String; + locale: Schema.Attribute.String & Schema.Attribute.Private; localizations: Schema.Attribute.Relation< 'oneToMany', - 'admin::api-token-permission' + 'plugin::users-permissions.permission' + > & + Schema.Attribute.Private; + publishedAt: Schema.Attribute.DateTime; + role: Schema.Attribute.Relation< + 'manyToOne', + 'plugin::users-permissions.role' >; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; }; } -export interface AdminTransferToken extends Struct.CollectionTypeSchema { - collectionName: 'strapi_transfer_tokens'; +export interface PluginUsersPermissionsRole + extends Struct.CollectionTypeSchema { + collectionName: 'up_roles'; info: { - name: 'Transfer Token'; - singularName: 'transfer-token'; - pluralName: 'transfer-tokens'; - displayName: 'Transfer Token'; description: ''; + displayName: 'Role'; + name: 'role'; + pluralName: 'roles'; + singularName: 'role'; }; options: { draftAndPublish: false; @@ -816,109 +833,115 @@ export interface AdminTransferToken extends Struct.CollectionTypeSchema { }; }; attributes: { + createdAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + description: Schema.Attribute.String; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::users-permissions.role' + > & + Schema.Attribute.Private; name: Schema.Attribute.String & - Schema.Attribute.Required & - Schema.Attribute.Unique & - Schema.Attribute.SetMinMaxLength<{ - minLength: 1; - }>; - description: Schema.Attribute.String & - Schema.Attribute.SetMinMaxLength<{ - minLength: 1; - }> & - Schema.Attribute.DefaultTo<''>; - accessKey: Schema.Attribute.String & Schema.Attribute.Required & Schema.Attribute.SetMinMaxLength<{ - minLength: 1; + minLength: 3; }>; - lastUsedAt: Schema.Attribute.DateTime; permissions: Schema.Attribute.Relation< 'oneToMany', - 'admin::transfer-token-permission' + 'plugin::users-permissions.permission' >; - expiresAt: Schema.Attribute.DateTime; - lifespan: Schema.Attribute.BigInteger; - createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; publishedAt: Schema.Attribute.DateTime; - createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; + type: Schema.Attribute.String & Schema.Attribute.Unique; + updatedAt: Schema.Attribute.DateTime; updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - locale: Schema.Attribute.String; - localizations: Schema.Attribute.Relation< + users: Schema.Attribute.Relation< 'oneToMany', - 'admin::transfer-token' + 'plugin::users-permissions.user' >; }; } -export interface AdminTransferTokenPermission +export interface PluginUsersPermissionsUser extends Struct.CollectionTypeSchema { - collectionName: 'strapi_transfer_token_permissions'; + collectionName: 'up_users'; info: { - name: 'Transfer Token Permission'; description: ''; - singularName: 'transfer-token-permission'; - pluralName: 'transfer-token-permissions'; - displayName: 'Transfer Token Permission'; + displayName: 'User'; + name: 'user'; + pluralName: 'users'; + singularName: 'user'; }; options: { draftAndPublish: false; - }; - pluginOptions: { - 'content-manager': { - visible: false; - }; - 'content-type-builder': { - visible: false; - }; + timestamps: true; }; attributes: { - action: Schema.Attribute.String & - Schema.Attribute.Required & - Schema.Attribute.SetMinMaxLength<{ - minLength: 1; - }>; - token: Schema.Attribute.Relation<'manyToOne', 'admin::transfer-token'>; + blocked: Schema.Attribute.Boolean & Schema.Attribute.DefaultTo; + confirmationToken: Schema.Attribute.String & Schema.Attribute.Private; + confirmed: Schema.Attribute.Boolean & Schema.Attribute.DefaultTo; createdAt: Schema.Attribute.DateTime; - updatedAt: Schema.Attribute.DateTime; - publishedAt: Schema.Attribute.DateTime; createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private; - updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private; - locale: Schema.Attribute.String; + email: Schema.Attribute.Email & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 6; + }>; + locale: Schema.Attribute.String & Schema.Attribute.Private; localizations: Schema.Attribute.Relation< 'oneToMany', - 'admin::transfer-token-permission' + 'plugin::users-permissions.user' + > & + Schema.Attribute.Private; + password: Schema.Attribute.Password & + Schema.Attribute.Private & + Schema.Attribute.SetMinMaxLength<{ + minLength: 6; + }>; + provider: Schema.Attribute.String; + publishedAt: Schema.Attribute.DateTime; + resetPasswordToken: Schema.Attribute.String & Schema.Attribute.Private; + role: Schema.Attribute.Relation< + 'manyToOne', + 'plugin::users-permissions.role' >; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + username: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Unique & + Schema.Attribute.SetMinMaxLength<{ + minLength: 3; + }>; }; } declare module '@strapi/strapi' { export module Public { export interface ContentTypeSchemas { + 'admin::api-token': AdminApiToken; + 'admin::api-token-permission': AdminApiTokenPermission; + 'admin::permission': AdminPermission; + 'admin::role': AdminRole; + 'admin::transfer-token': AdminTransferToken; + 'admin::transfer-token-permission': AdminTransferTokenPermission; + 'admin::user': AdminUser; 'api::home.home': ApiHomeHome; 'api::page.page': ApiPagePage; - 'plugin::upload.file': PluginUploadFile; - 'plugin::upload.folder': PluginUploadFolder; - 'plugin::i18n.locale': PluginI18NLocale; 'plugin::content-releases.release': PluginContentReleasesRelease; 'plugin::content-releases.release-action': PluginContentReleasesReleaseAction; + 'plugin::i18n.locale': PluginI18NLocale; 'plugin::review-workflows.workflow': PluginReviewWorkflowsWorkflow; 'plugin::review-workflows.workflow-stage': PluginReviewWorkflowsWorkflowStage; + 'plugin::upload.file': PluginUploadFile; + 'plugin::upload.folder': PluginUploadFolder; 'plugin::users-permissions.permission': PluginUsersPermissionsPermission; 'plugin::users-permissions.role': PluginUsersPermissionsRole; 'plugin::users-permissions.user': PluginUsersPermissionsUser; - 'admin::permission': AdminPermission; - 'admin::user': AdminUser; - 'admin::role': AdminRole; - 'admin::api-token': AdminApiToken; - 'admin::api-token-permission': AdminApiTokenPermission; - 'admin::transfer-token': AdminTransferToken; - 'admin::transfer-token-permission': AdminTransferTokenPermission; } } } From c30f034cf2be37b70d29efe1cd514a9bbb2f0ec6 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Sun, 29 Dec 2024 22:38:20 +0000 Subject: [PATCH 02/19] chore: disable rate limiting in the playground --- playground/config/admin.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/playground/config/admin.js b/playground/config/admin.js index 4166400..2a6525c 100644 --- a/playground/config/admin.js +++ b/playground/config/admin.js @@ -5,6 +5,9 @@ module.exports = ({ env }) => ({ apiToken: { salt: env('API_TOKEN_SALT'), }, + rateLimit: { + enabled: false, + }, transfer: { token: { salt: env('TRANSFER_TOKEN_SALT'), From 592e934fe862e55a13ba0cbfb4797760f7b02f96 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Sun, 29 Dec 2024 22:38:38 +0000 Subject: [PATCH 03/19] chore: add config/sync to the watch ignore files --- playground/config/admin.js | 1 + 1 file changed, 1 insertion(+) diff --git a/playground/config/admin.js b/playground/config/admin.js index 2a6525c..0a18658 100644 --- a/playground/config/admin.js +++ b/playground/config/admin.js @@ -19,5 +19,6 @@ module.exports = ({ env }) => ({ }, watchIgnoreFiles: [ '!**/.yalc/**/server/**', + '**/config/sync/**', ] }); From f194c394d2750cde302e9fc5b8e889c8451f7e68 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Sun, 29 Dec 2024 22:41:05 +0000 Subject: [PATCH 04/19] feat: add cypress and e2e tests --- .gitignore | 5 + admin/src/index.cy.jsx | 75 +++++ cypress.config.js | 32 ++ cypress/support/commands.js | 126 ++++++++ cypress/support/e2e.js | 22 ++ package.json | 4 + yarn.lock | 587 ++++++++++++++++++++++++++++++++++-- 7 files changed, 822 insertions(+), 29 deletions(-) create mode 100644 admin/src/index.cy.jsx create mode 100644 cypress.config.js create mode 100644 cypress/support/commands.js create mode 100644 cypress/support/e2e.js diff --git a/.gitignore b/.gitignore index 59d3061..73417aa 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,8 @@ npm-debug.log build dist bundle + +# Cypress +cypress/screenshots/ +cypress/videos/ +cypress/downloads/ diff --git a/admin/src/index.cy.jsx b/admin/src/index.cy.jsx new file mode 100644 index 0000000..a78a193 --- /dev/null +++ b/admin/src/index.cy.jsx @@ -0,0 +1,75 @@ +/// +// + +describe('Config Sync', () => { + beforeEach(() => { + cy.task('deleteFolder', 'playground/config/sync'); + }); + + it('Check the config diff', () => { + cy.login(); + cy.navigateToInterface(); + cy.initialExport(); + + cy.makeConfigChanges(); + + cy.navigateToInterface(); + + cy.get('tbody tr').contains('plugin_users-permissions_advanced').click(); + + cy.contains('"unique_email": true,'); + cy.contains('"unique_email": false,'); + }); + + it('Download the config as zip', () => { + cy.login(); + cy.navigateToInterface(); + cy.initialExport(); + + cy.intercept({ + method: 'GET', + url: '/config-sync/zip', + }).as('getConfigZip'); + + cy.get('button').contains('Download Config').click(); + + cy.wait('@getConfigZip').then((interception) => { + const configZipResponse = interception.response.body; + const downloadsFolder = Cypress.config('downloadsFolder'); + cy.readFile(`${downloadsFolder}/${configZipResponse.name.replaceAll(':', '_')}`).should('exist'); + }); + }); + + it('Partial import & export', () => { + cy.login(); + cy.navigateToInterface(); + cy.initialExport(); + + cy.makeConfigChanges(); + + cy.navigateToInterface(); + + cy.get('button[aria-label="Select all entries"]').click(); + + cy.intercept({ + method: 'POST', + url: '/config-sync/import', + }).as('importConfig'); + cy.get('button[aria-label="Select plugin_upload_settings"]').click(); + cy.get('button').contains('Import').click(); + cy.get('button').contains('Yes, import').click(); + cy.wait('@importConfig').its('response.statusCode').should('equal', 200); + cy.contains('plugin_users-permissions_advanced'); + cy.contains('plugin_users-permissions_email'); + + cy.intercept({ + method: 'POST', + url: '/config-sync/export', + }).as('exportConfig'); + cy.get('button[aria-label="Select plugin_users-permissions_advanced"]').click(); + cy.get('button').contains('Export').click(); + cy.get('button').contains('Yes, export').click(); + cy.wait('@exportConfig').its('response.statusCode').should('equal', 200); + cy.contains('plugin_users-permissions_email'); + }); +}); diff --git a/cypress.config.js b/cypress.config.js new file mode 100644 index 0000000..2a4fef2 --- /dev/null +++ b/cypress.config.js @@ -0,0 +1,32 @@ +const { defineConfig } = require('cypress'); +const fs = require('fs-extra'); + +module.exports = defineConfig({ + e2e: { + baseUrl: 'http://localhost:1337', + specPattern: '**/*.cy.{js,ts,jsx,tsx}', + video: false, + defaultCommandTimeout: 10000, + requestTimeout: 10000, + setupNodeEvents(on, config) { + // implement node event listeners here. + require('cypress-terminal-report/src/installLogsPrinter')(on); + + on('task', { + deleteFolder(folderName) { + console.log(`deleting folder ${folderName}`); + + return fs.remove(folderName) + .then(() => { + console.log(`folder ${folderName} deleted`); + return null; + }) + .catch(err => { + console.error(`error deleting folder ${folderName}`, err); + throw err; + }); + }, + }); + }, + }, +}); diff --git a/cypress/support/commands.js b/cypress/support/commands.js new file mode 100644 index 0000000..0751064 --- /dev/null +++ b/cypress/support/commands.js @@ -0,0 +1,126 @@ +/// +// *********************************************** +// This example commands.ts shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) +// + +Cypress.Commands.add('login', (path) => { + cy.visit('/'); + + cy.intercept({ + method: 'GET', + url: '/admin/users/me', + }).as('sessionCheck'); + + cy.intercept({ + method: 'GET', + url: '/admin/init', + }).as('adminInit'); + + // Wait for the initial request to complete. + cy.wait('@adminInit').its('response.statusCode').should('equal', 200); + + // Wait for the form to render. + cy.wait(1000); + + cy.get('body').then(($body) => { + // Login + if ($body.text().includes('Log in to your Strapi account')) { + cy.get('input[name="email"]').type('johndoe@example.com'); + cy.get('input[name="password"]').type('Abc12345678'); + cy.get('button[type="submit"]').click(); + cy.wait('@sessionCheck').its('response.statusCode').should('equal', 200); + } + // Register + if ($body.text().includes('Credentials are only used to authenticate in Strapi')) { + cy.get('input[name="firstname"]').type('John'); + cy.get('input[name="email"]').type('johndoe@example.com'); + cy.get('input[name="password"]').type('Abc12345678'); + cy.get('input[name="confirmPassword"]').type('Abc12345678'); + cy.get('button[type="submit"]').click(); + cy.wait('@sessionCheck').its('response.statusCode').should('equal', 200); + } + }); +}); + +Cypress.Commands.add('navigateToInterface', (path) => { + cy.intercept({ + method: 'GET', + url: '/config-sync/diff', + }).as('getConfigDiff'); + + cy.get('a[href="/admin/settings"]').click(); + cy.get('a[href="/admin/settings/config-sync"]').click(); + + cy.wait('@getConfigDiff').its('response.statusCode').should('equal', 200); +}); + + +Cypress.Commands.add('initialExport', (path) => { + cy.intercept({ + method: 'POST', + url: '/config-sync/export', + }).as('exportConfig'); + + cy.get('button').contains('Make the initial export').click(); + cy.get('button').contains('Yes, export').click(); + + cy.wait('@exportConfig').its('response.statusCode').should('equal', 200); + + cy.contains('Config was successfully exported to config/sync/.'); +}); + +Cypress.Commands.add('makeConfigChanges', (path) => { + // Change a setting in the UP advanced settings + cy.intercept({ + method: 'PUT', + url: '/users-permissions/advanced', + }).as('saveUpAdvanced'); + cy.get('a[href="/admin/settings/users-permissions/advanced-settings"]').click(); + cy.get('input[name="unique_email"').click(); + cy.get('button[type="submit"]').click(); + cy.wait('@saveUpAdvanced').its('response.statusCode').should('equal', 200); + + // Change a setting in the media library settings + cy.intercept({ + method: 'PUT', + url: '/upload/settings', + }).as('saveMediaLibrarySettings'); + cy.get('a[href="/admin/settings/media-library"]').click(); + cy.get('input[name="responsiveDimensions"').click(); + cy.get('button[type="submit"]').click(); + cy.wait('@saveMediaLibrarySettings').its('response.statusCode').should('equal', 200); + + // Change a setting in the email templates + cy.intercept({ + method: 'PUT', + url: '/users-permissions/email-templates', + }).as('saveUpEmailTemplates'); + cy.get('a[href="/admin/settings/users-permissions/email-templates"]').click(); + cy.get('tbody tr').contains('Reset password').click(); + cy.get('input[name="options.response_email"]').clear().type(`${Math.random().toString(36).substring(2, 15)}@example.com`); + cy.get('button[type="submit"]').click(); + cy.wait('@saveUpEmailTemplates').its('response.statusCode').should('equal', 200); +}); diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js new file mode 100644 index 0000000..9b4f76f --- /dev/null +++ b/cypress/support/e2e.js @@ -0,0 +1,22 @@ +// *********************************************************** +// This example support/e2e.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; + +require('cypress-terminal-report/src/installLogsCollector')(); + +// Alternatively you can use CommonJS syntax: +// require('./commands') diff --git a/package.json b/package.json index e774b52..7287e17 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "eslint:fix": "eslint --fix './**/*.{js,jsx}'", "test:unit": "jest --verbose", "test:integration": "cd playground && node_modules/.bin/jest --verbose --forceExit --detectOpenHandles", + "test:e2e": "cypress open", "playground:install": "yarn playground:yalc-add-link && cd playground && yarn install", "playground:yalc-add": "cd playground && yalc add strapi-plugin-config-sync", "playground:yalc-add-link": "cd playground && yalc add --link strapi-plugin-config-sync", @@ -95,12 +96,15 @@ "@strapi/strapi": "^5.0.0", "@strapi/utils": "^5.0.0", "babel-eslint": "9.0.0", + "cypress": "^13.9.0", + "cypress-terminal-report": "^6.0.2", "eslint": "^7.32.0", "eslint-config-airbnb": "^18.2.1", "eslint-config-react-app": "^3.0.7", "eslint-import-resolver-webpack": "^0.11.0", "eslint-loader": "^4.0.2", "eslint-plugin-babel": "^5.3.0", + "eslint-plugin-cypress": "^3.2.0", "eslint-plugin-flowtype": "2.50.1", "eslint-plugin-import": "^2.22.1", "eslint-plugin-jsx-a11y": "^6.4.1", diff --git a/yarn.lock b/yarn.lock index 15b915c..5c80629 100644 --- a/yarn.lock +++ b/yarn.lock @@ -416,6 +416,38 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== +"@cypress/request@^3.0.6": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.7.tgz#6a74a4da98d9e5ae9121d6e2d9c14780c9b5cf1a" + integrity sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~4.0.0" + http-signature "~1.4.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + performance-now "^2.1.0" + qs "6.13.1" + safe-buffer "^5.1.2" + tough-cookie "^5.0.0" + tunnel-agent "^0.6.0" + uuid "^8.3.2" + +"@cypress/xvfb@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + "@dabh/diagnostics@^2.0.2": version "2.0.3" resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" @@ -3586,6 +3618,16 @@ "@types/node" "*" "@types/send" "*" +"@types/sinonjs__fake-timers@8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" + integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== + +"@types/sizzle@^2.3.2": + version "2.3.9" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.9.tgz#d4597dbd4618264c414d7429363e3f50acb66ea2" + integrity sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w== + "@types/stack-utils@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" @@ -3620,6 +3662,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + "@ucast/core@^1.0.0", "@ucast/core@^1.4.1", "@ucast/core@^1.6.1": version "1.10.2" resolved "https://registry.yarnpkg.com/@ucast/core/-/core-1.10.2.tgz#30b6b893479823265368e528b61b042f752f2c92" @@ -3964,7 +4013,7 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -4033,6 +4082,11 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +arch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + argparse@^1.0.7, argparse@~1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -4187,6 +4241,18 @@ asn1.js@^4.10.1: inherits "^2.0.1" minimalistic-assert "^1.0.0" +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + assert@^1.1.1: version "1.5.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.1.tgz#038ab248e4ff078e7bc2485ba6e6388466c78f76" @@ -4205,7 +4271,7 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async@^3.2.3: +async@^3.2.0, async@^3.2.3: version "3.2.6" resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== @@ -4215,6 +4281,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" @@ -4222,6 +4293,16 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + axe-core@^4.10.0: version "4.10.2" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.2.tgz#85228e3e1d8b8532a27659b332e39b7fa0e022df" @@ -4384,6 +4465,13 @@ base64-js@^1.0.2, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + bcryptjs@2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" @@ -4413,6 +4501,16 @@ bl@^4.0.3, bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" +blob-util@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -4575,6 +4673,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -4599,7 +4702,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.1.0, buffer@^5.5.0: +buffer@^5.1.0, buffer@^5.5.0, buffer@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -4668,6 +4771,11 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" +cachedir@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" + integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== + call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" @@ -4729,6 +4837,11 @@ capital-case@^1.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + castable-video@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/castable-video/-/castable-video-1.1.3.tgz#d43d34e9cecc1eed3f9c71fe0e7682887247952b" @@ -4810,6 +4923,11 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +check-more-types@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== + chokidar@3.6.0, chokidar@^3.5.2, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" @@ -4862,6 +4980,11 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== +ci-info@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.1.0.tgz#92319d2fa29d2620180ea5afed31f589bc98cf83" + integrity sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -4939,7 +5062,7 @@ cli-table3@0.6.2: optionalDependencies: "@colors/colors" "1.5.0" -cli-table3@0.6.5: +cli-table3@0.6.5, cli-table3@~0.6.1: version "0.6.5" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== @@ -4955,6 +5078,14 @@ cli-table@^0.3.6: dependencies: colors "1.0.3" +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -5087,7 +5218,7 @@ colorette@2.0.19: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== -colorette@^2.0.10: +colorette@^2.0.10, colorette@^2.0.16: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== @@ -5105,7 +5236,7 @@ colorspace@1.1.x: color "^3.1.3" text-hex "1.0.x" -combined-stream@^1.0.8: +combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -5132,11 +5263,21 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -5274,6 +5415,11 @@ core-js-pure@^3.23.3, core-js-pure@^3.30.2: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.39.0.tgz#aa0d54d70a15bdc13e7c853db87c10abc30d68f3" integrity sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg== +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + core-util-is@^1.0.2, core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -5461,11 +5607,78 @@ custom-media-element@~1.4.1: resolved "https://registry.yarnpkg.com/custom-media-element/-/custom-media-element-1.4.1.tgz#799d86e91d5feaa60fa351e649d8d577826aa407" integrity sha512-kWPRk+6tEebklkd9QWbeCAEOzgL72Uhra4ZSmjN3R9mxg4emqh/0vKyKgxzLtuak76SiaSstzCY6zFrBZ8kyJg== +cypress-terminal-report@^6.0.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/cypress-terminal-report/-/cypress-terminal-report-6.2.0.tgz#9456c4003ade23a0908746edf9f926846ee6b1bc" + integrity sha512-u5YaGaVhRW7uATZRx0Ccg2QIfwP08cNpihQEbtvN0toT/oZbQYHo9oNkrkX6hPJ5kf3DSDj194G61greu4gG0g== + dependencies: + chalk "^4.0.0" + fs-extra "^10.1.0" + process "^0.11.10" + semver "^7.5.4" + tv4 "^1.3.0" + +cypress@^13.9.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.17.0.tgz#34c3d68080c4497eace0f353bd1629587a5f600d" + integrity sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA== + dependencies: + "@cypress/request" "^3.0.6" + "@cypress/xvfb" "^1.2.4" + "@types/sinonjs__fake-timers" "8.1.1" + "@types/sizzle" "^2.3.2" + arch "^2.2.0" + blob-util "^2.0.2" + bluebird "^3.7.2" + buffer "^5.7.1" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + ci-info "^4.0.0" + cli-cursor "^3.1.0" + cli-table3 "~0.6.1" + commander "^6.2.1" + common-tags "^1.8.0" + dayjs "^1.10.4" + debug "^4.3.4" + enquirer "^2.3.6" + eventemitter2 "6.4.7" + execa "4.1.0" + executable "^4.1.1" + extract-zip "2.0.1" + figures "^3.2.0" + fs-extra "^9.1.0" + getos "^3.2.1" + is-installed-globally "~0.4.0" + lazy-ass "^1.6.0" + listr2 "^3.8.3" + lodash "^4.17.21" + log-symbols "^4.0.0" + minimist "^1.2.8" + ospath "^1.2.2" + pretty-bytes "^5.6.0" + process "^0.11.10" + proxy-from-env "1.0.0" + request-progress "^3.0.0" + semver "^7.5.3" + supports-color "^8.1.1" + tmp "~0.2.3" + tree-kill "1.2.2" + untildify "^4.0.0" + yauzl "^2.10.0" + damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + data-view-buffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" @@ -5505,6 +5718,11 @@ date-fns@2.30.0, date-fns@^2.30.0: dependencies: "@babel/runtime" "^7.21.0" +dayjs@^1.10.4: + version "1.11.13" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + debounce@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" @@ -5914,6 +6132,14 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -6003,7 +6229,7 @@ enhanced-resolve@~0.9.0: memory-fs "^0.2.0" tapable "^0.1.8" -enquirer@^2.3.5: +enquirer@^2.3.5, enquirer@^2.3.6: version "2.4.1" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== @@ -6406,6 +6632,13 @@ eslint-plugin-babel@^5.3.0: dependencies: eslint-rule-composer "^0.3.0" +eslint-plugin-cypress@^3.2.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-3.6.0.tgz#d0e2f68f27b9a34ecf565bef58ed82c8f10d39a8" + integrity sha512-7IAMcBbTVu5LpWeZRn5a9mQ30y4hKp3AfTz+6nSD/x/7YyLMoBI6X7XjDLYI6zFvuy4Q4QVGl563AGEXGW/aSA== + dependencies: + globals "^13.20.0" + eslint-plugin-flowtype@2.50.1: version "2.50.1" resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz#36d4c961ac8b9e9e1dc091d3fba0537dad34ae8a" @@ -6625,6 +6858,11 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== +eventemitter2@6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== + events@^3.0.0, events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -6643,6 +6881,21 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +execa@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + execa@5.1.1, execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -6676,6 +6929,13 @@ execa@^9.3.1: strip-final-newline "^4.0.0" yoctocolors "^2.0.0" +executable@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -6704,7 +6964,7 @@ expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -extend@^3.0.2: +extend@^3.0.2, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -6718,6 +6978,27 @@ external-editor@^3.0.3, external-editor@^3.1.0: iconv-lite "^0.4.24" tmp "^0.0.33" +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -6773,12 +7054,19 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + fecha@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== -figures@^3.0.0: +figures@^3.0.0, figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -6933,6 +7221,11 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + fork-ts-checker-webpack-plugin@8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz#dae45dfe7298aa5d553e2580096ced79b6179504" @@ -6951,7 +7244,7 @@ fork-ts-checker-webpack-plugin@8.0.0: semver "^7.3.5" tapable "^2.2.1" -form-data@^4.0.0: +form-data@^4.0.0, form-data@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== @@ -7008,7 +7301,7 @@ fs-extra@11.2.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^10.0.0: +fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== @@ -7026,6 +7319,16 @@ fs-extra@^8.0.1, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@~7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -7146,7 +7449,7 @@ get-stdin@^9.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== -get-stream@^5.1.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -7180,6 +7483,20 @@ getopts@2.3.0: resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4" integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA== +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== + dependencies: + async "^3.2.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + git-diff@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/git-diff/-/git-diff-2.0.6.tgz#4a8ece670d64d1f9f4e68191ad8b1013900f6c1e" @@ -7282,6 +7599,13 @@ global-agent@3.0.0: semver "^7.3.2" serialize-error "^7.0.1" +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== + dependencies: + ini "2.0.0" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -7307,7 +7631,7 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0, globals@^13.9.0: +globals@^13.20.0, globals@^13.6.0, globals@^13.9.0: version "13.24.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== @@ -7644,6 +7968,15 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-signature@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" + integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.18.0" + http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" @@ -7657,6 +7990,11 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -7785,6 +8123,11 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== +ini@2.0.0, ini@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + ini@4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.2.tgz#7f646dbd9caea595e61f88ef60bfff8b01f8130a" @@ -7795,11 +8138,6 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - inquirer@8.2.5: version "8.2.5" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" @@ -8052,6 +8390,14 @@ is-hotkey@^0.1.6: resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.8.tgz#6b1f4b2d0e5639934e20c05ed24d623a21d36d25" integrity sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ== +is-installed-globally@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" @@ -8111,7 +8457,7 @@ is-path-cwd@^3.0.0: resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-3.0.0.tgz#889b41e55c8588b1eb2a96a61d05740a674521c7" integrity sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA== -is-path-inside@^3.0.1: +is-path-inside@^3.0.1, is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -8210,7 +8556,7 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" -is-typedarray@^1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== @@ -8805,6 +9151,11 @@ js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + jsesc@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" @@ -8830,12 +9181,17 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-safe@^5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -8883,6 +9239,16 @@ jsonwebtoken@9.0.0: ms "^2.1.1" semver "^7.3.8" +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" @@ -9121,6 +9487,11 @@ language-tags@^1.0.9: dependencies: language-subtag-registry "^0.3.20" +lazy-ass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -9193,6 +9564,20 @@ linkify-it@^3.0.1: dependencies: uc.micro "^1.0.1" +listr2@^3.8.3: + version "3.14.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + load-yaml-file@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" @@ -9269,6 +9654,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -9279,7 +9669,7 @@ lodash@4.17.21, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.19, lodash@^4.17. resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.1.0: +log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -9295,6 +9685,16 @@ log-symbols@^6.0.0: chalk "^5.3.0" is-unicode-supported "^1.3.0" +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + logform@^2.4.0, logform@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.1.tgz#71403a7d8cae04b2b734147963236205db9b3df0" @@ -9609,7 +10009,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== -mime-types@2.1.35, mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@2.1.35, mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -10022,7 +10422,7 @@ npm-packlist@^2.1.5: npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-run-path@^4.0.1: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -10254,6 +10654,11 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== + outdent@0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" @@ -10299,7 +10704,7 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@4.0.0: +p-map@4.0.0, p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== @@ -10565,6 +10970,16 @@ pbkdf2@^3.1.2: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + pg-connection-string@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.1.tgz#78c23c21a35dd116f48e12e23c0965e8d9e2cbfb" @@ -10580,6 +10995,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -10741,6 +11161,11 @@ prettier@3.3.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== +pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -10834,6 +11259,11 @@ protocols@^2.0.0, protocols@^2.0.1: resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== +proxy-from-env@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -10886,6 +11316,13 @@ qs@6.11.1: dependencies: side-channel "^1.0.4" +qs@6.13.1: + version "6.13.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.1.tgz#3ce5fc72bd3a8171b85c99b93c65dd20b7d1b16e" + integrity sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg== + dependencies: + side-channel "^1.0.6" + qs@^6.11.0, qs@^6.12.3, qs@^6.5.2: version "6.13.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" @@ -11341,6 +11778,13 @@ request-ip@3.3.0: resolved "https://registry.yarnpkg.com/request-ip/-/request-ip-3.3.0.tgz#863451e8fec03847d44f223e30a5d63e369fa611" integrity sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA== +request-progress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== + dependencies: + throttleit "^1.0.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -11445,6 +11889,11 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -11523,7 +11972,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@7.8.1, rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1: +rxjs@7.8.1, rxjs@^7.2.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== @@ -11571,7 +12020,7 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -11909,6 +12358,15 @@ slate@0.94.1: is-plain-object "^5.0.0" tiny-warning "^1.0.3" +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -12044,6 +12502,21 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +sshpk@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + stack-trace@0.0.x: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" @@ -12500,6 +12973,11 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +throttleit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== + through2@^2.0.1, through2@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -12508,7 +12986,7 @@ through2@^2.0.1, through2@~2.0.3: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6: +through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -12550,6 +13028,18 @@ title-case@^3.0.3: dependencies: tslib "^2.0.3" +tldts-core@^6.1.70: + version "6.1.70" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.70.tgz#a954e93237ece2e1705b438600793c86a25f8c00" + integrity sha512-RNnIXDB1FD4T9cpQRErEqw6ZpjLlGdMOitdV+0xtbsnwr4YFka1zpc7D4KD+aAn8oSG5JyFrdasZTE04qDE9Yg== + +tldts@^6.1.32: + version "6.1.70" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.70.tgz#b571e5645ab9dc6f289453115d52602b8a384cfe" + integrity sha512-/W1YVgYVJd9ZDjey5NXadNh0mJXkiUMUue9Zebd0vpdo1sU+H4zFFTaJ1RKD4N6KFoHfcXy6l+Vu7bh+bdWCzA== + dependencies: + tldts-core "^6.1.70" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -12557,6 +13047,11 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -12594,7 +13089,14 @@ touch@^3.1.0: resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== -tree-kill@^1.2.2: +tough-cookie@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.0.0.tgz#6b6518e2b5c070cf742d872ee0f4f92d69eac1af" + integrity sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q== + dependencies: + tldts "^6.1.32" + +tree-kill@1.2.2, tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== @@ -12641,6 +13143,16 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tv4@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963" + integrity sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -13010,6 +13522,15 @@ vary@^1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + vite@5.2.14: version "5.2.14" resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.14.tgz#fd5f60facf6b5f90ec7da6323c467a365d380c3d" @@ -13427,6 +13948,14 @@ yargs@^17.3.1, yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + ylru@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.4.0.tgz#0cf0aa57e9c24f8a2cbde0cc1ca2c9592ac4e0f6" From 35463b9631d6f28db40578d2f7b854eeee1b78b6 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Sun, 29 Dec 2024 22:41:44 +0000 Subject: [PATCH 05/19] chore: run the e2e tests in the pipeline --- .github/workflows/tests.yml | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c316c46..ec74ab0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -27,8 +27,8 @@ jobs: run: yarn --frozen-lockfile - name: Run eslint run: yarn run eslint - integration: - name: 'integration' + test: + name: 'test' needs: [lint] runs-on: ubuntu-latest strategy: @@ -50,8 +50,20 @@ jobs: run: cd playground && yarn install --unsafe-perm - name: Build playground run: yarn playground:build - - name: Run test + # - name: Run unit tests + # run: yarn test:unit + - name: Run integration tests run: yarn run -s test:integration + - name: Run end-to-end tests + uses: cypress-io/github-action@v6 + with: + start: yarn playground:start + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: cypress-screenshots + path: cypress/screenshots + if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn` - name: Upload coverage to Codecov uses: codecov/codecov-action@v2 with: @@ -59,20 +71,3 @@ jobs: flags: unit verbose: true fail_ci_if_error: true - # unit: - # name: 'unit' - # needs: [lint] - # runs-on: ubuntu-latest - # strategy: - # matrix: - # node: [16, 18, 20] - # steps: - # - uses: actions/checkout@v2 - # - uses: actions/setup-node@v2 - # with: - # node-version: ${{ matrix.node }} - # cache: 'yarn' - # - name: Install dependencies - # run: yarn --ignore-scripts --frozen-lockfile - # - name: Run test - # run: yarn run -s test:unit From 24bbf0788b02fc2e917140314009b95253a021ee Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 10:43:18 +0000 Subject: [PATCH 06/19] fix: add the /dist folder to eslintignore --- .eslintignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintignore b/.eslintignore index 50516d6..02933d0 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,7 @@ **/node_modules **/public **/build +**/dist **/config **/scripts **/playground From 4e4613d8ab3ab13a49f027dd7c65d92a45bf5138 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 10:43:38 +0000 Subject: [PATCH 07/19] fix: updated eslint rules for cypress files --- .eslintrc | 14 ++++++++++++++ admin/src/index.cy.jsx | 3 +-- cypress.config.js | 3 ++- cypress/support/commands.js | 6 ++++-- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/.eslintrc b/.eslintrc index dc830b3..bceeb82 100644 --- a/.eslintrc +++ b/.eslintrc @@ -25,6 +25,20 @@ "globals": { "strapi": true }, + "overrides": [ + { + "files": [ + "**/*.cy.*", + "./cypress/**/*.*" + ], + "extends": [ + "plugin:cypress/recommended" + ], + "parserOptions": { + "project": "./tsconfig.cypress.json" + } + } + ], "rules": { "import/no-unresolved": [2, { "ignore": [ diff --git a/admin/src/index.cy.jsx b/admin/src/index.cy.jsx index a78a193..e157500 100644 --- a/admin/src/index.cy.jsx +++ b/admin/src/index.cy.jsx @@ -1,5 +1,4 @@ -/// -// +// describe('Config Sync', () => { beforeEach(() => { diff --git a/cypress.config.js b/cypress.config.js index 2a4fef2..701bbf7 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -10,6 +10,7 @@ module.exports = defineConfig({ requestTimeout: 10000, setupNodeEvents(on, config) { // implement node event listeners here. + // eslint-disable-next-line global-require require('cypress-terminal-report/src/installLogsPrinter')(on); on('task', { @@ -21,7 +22,7 @@ module.exports = defineConfig({ console.log(`folder ${folderName} deleted`); return null; }) - .catch(err => { + .catch((err) => { console.error(`error deleting folder ${folderName}`, err); throw err; }); diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 0751064..627c81f 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -1,4 +1,4 @@ -/// +// // *********************************************** // This example commands.ts shows you how to // create various custom commands and overwrite @@ -43,6 +43,7 @@ Cypress.Commands.add('login', (path) => { cy.wait('@adminInit').its('response.statusCode').should('equal', 200); // Wait for the form to render. + // eslint-disable-next-line cypress/no-unnecessary-waiting cy.wait(1000); cy.get('body').then(($body) => { @@ -120,7 +121,8 @@ Cypress.Commands.add('makeConfigChanges', (path) => { }).as('saveUpEmailTemplates'); cy.get('a[href="/admin/settings/users-permissions/email-templates"]').click(); cy.get('tbody tr').contains('Reset password').click(); - cy.get('input[name="options.response_email"]').clear().type(`${Math.random().toString(36).substring(2, 15)}@example.com`); + cy.get('input[name="options.response_email"]').clear(); + cy.get('input[name="options.response_email"]').type(`${Math.random().toString(36).substring(2, 15)}@example.com`); cy.get('button[type="submit"]').click(); cy.wait('@saveUpEmailTemplates').its('response.statusCode').should('equal', 200); }); From fc5df403af6d9a1bd8008c67b5ad65d34b42ef6d Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 12:37:38 +0000 Subject: [PATCH 08/19] fix: add missing playground:start command --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 7287e17..a4acb4f 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,8 @@ "playground:yalc-add": "cd playground && yalc add strapi-plugin-config-sync", "playground:yalc-add-link": "cd playground && yalc add --link strapi-plugin-config-sync", "playground:build": "cd playground && yarn build", - "playground:develop": "cd playground && yarn develop" + "playground:develop": "cd playground && yarn develop", + "playground:start": "cd playground && yarn start" }, "dependencies": { "adm-zip": "^0.5.16", From 11cde0b63892e18af9ac4fb11eeea58e09da1c8c Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 13:04:25 +0000 Subject: [PATCH 09/19] fix: disable unfinished test --- admin/src/index.cy.jsx | 64 +++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/admin/src/index.cy.jsx b/admin/src/index.cy.jsx index e157500..57ac469 100644 --- a/admin/src/index.cy.jsx +++ b/admin/src/index.cy.jsx @@ -39,36 +39,36 @@ describe('Config Sync', () => { }); }); - it('Partial import & export', () => { - cy.login(); - cy.navigateToInterface(); - cy.initialExport(); - - cy.makeConfigChanges(); - - cy.navigateToInterface(); - - cy.get('button[aria-label="Select all entries"]').click(); - - cy.intercept({ - method: 'POST', - url: '/config-sync/import', - }).as('importConfig'); - cy.get('button[aria-label="Select plugin_upload_settings"]').click(); - cy.get('button').contains('Import').click(); - cy.get('button').contains('Yes, import').click(); - cy.wait('@importConfig').its('response.statusCode').should('equal', 200); - cy.contains('plugin_users-permissions_advanced'); - cy.contains('plugin_users-permissions_email'); - - cy.intercept({ - method: 'POST', - url: '/config-sync/export', - }).as('exportConfig'); - cy.get('button[aria-label="Select plugin_users-permissions_advanced"]').click(); - cy.get('button').contains('Export').click(); - cy.get('button').contains('Yes, export').click(); - cy.wait('@exportConfig').its('response.statusCode').should('equal', 200); - cy.contains('plugin_users-permissions_email'); - }); + // it('Partial import & export', () => { + // cy.login(); + // cy.navigateToInterface(); + // cy.initialExport(); + + // cy.makeConfigChanges(); + + // cy.navigateToInterface(); + + // cy.get('button[aria-label="Select all entries"]').click(); + + // cy.intercept({ + // method: 'POST', + // url: '/config-sync/import', + // }).as('importConfig'); + // cy.get('button[aria-label="Select plugin_upload_settings"]').click(); + // cy.get('button').contains('Import').click(); + // cy.get('button').contains('Yes, import').click(); + // cy.wait('@importConfig').its('response.statusCode').should('equal', 200); + // cy.contains('plugin_users-permissions_advanced'); + // cy.contains('plugin_users-permissions_email'); + + // cy.intercept({ + // method: 'POST', + // url: '/config-sync/export', + // }).as('exportConfig'); + // cy.get('button[aria-label="Select plugin_users-permissions_advanced"]').click(); + // cy.get('button').contains('Export').click(); + // cy.get('button').contains('Yes, export').click(); + // cy.wait('@exportConfig').its('response.statusCode').should('equal', 200); + // cy.contains('plugin_users-permissions_email'); + // }); }); From f731691cd14305f4f7ae1c0d9277a09b3ead46a8 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 13:05:04 +0000 Subject: [PATCH 10/19] chore: try to fail the diff viewer test --- admin/src/components/ConfigDiff/index.jsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/admin/src/components/ConfigDiff/index.jsx b/admin/src/components/ConfigDiff/index.jsx index 2599ac9..3c3a14a 100644 --- a/admin/src/components/ConfigDiff/index.jsx +++ b/admin/src/components/ConfigDiff/index.jsx @@ -11,12 +11,12 @@ import { useIntl } from 'react-intl'; * * @see https://github.com/Aeolun/react-diff-viewer-continued/issues/43 */ -let ReactDiffViewer; -if (typeof RDV.default !== 'undefined') { - ReactDiffViewer = RDV.default; -} else { - ReactDiffViewer = RDV; -} +// let ReactDiffViewer; +// if (typeof RDV.default !== 'undefined') { +// ReactDiffViewer = RDV.default; +// } else { +// ReactDiffViewer = RDV; +// } import { Modal, @@ -48,7 +48,7 @@ const ConfigDiff = ({ oldValue, newValue, configName, trigger }) => { - Date: Mon, 30 Dec 2024 15:09:52 +0000 Subject: [PATCH 11/19] fix: diff viewer --- admin/src/components/ConfigDiff/index.jsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/admin/src/components/ConfigDiff/index.jsx b/admin/src/components/ConfigDiff/index.jsx index 3c3a14a..2599ac9 100644 --- a/admin/src/components/ConfigDiff/index.jsx +++ b/admin/src/components/ConfigDiff/index.jsx @@ -11,12 +11,12 @@ import { useIntl } from 'react-intl'; * * @see https://github.com/Aeolun/react-diff-viewer-continued/issues/43 */ -// let ReactDiffViewer; -// if (typeof RDV.default !== 'undefined') { -// ReactDiffViewer = RDV.default; -// } else { -// ReactDiffViewer = RDV; -// } +let ReactDiffViewer; +if (typeof RDV.default !== 'undefined') { + ReactDiffViewer = RDV.default; +} else { + ReactDiffViewer = RDV; +} import { Modal, @@ -48,7 +48,7 @@ const ConfigDiff = ({ oldValue, newValue, configName, trigger }) => { - Date: Mon, 30 Dec 2024 15:10:14 +0000 Subject: [PATCH 12/19] fix: up the timeout time of cypress --- cypress.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress.config.js b/cypress.config.js index 701bbf7..06d91b6 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -6,8 +6,8 @@ module.exports = defineConfig({ baseUrl: 'http://localhost:1337', specPattern: '**/*.cy.{js,ts,jsx,tsx}', video: false, - defaultCommandTimeout: 10000, - requestTimeout: 10000, + defaultCommandTimeout: 20000, + requestTimeout: 20000, setupNodeEvents(on, config) { // implement node event listeners here. // eslint-disable-next-line global-require From c46fcc9db82a74147e332b52ad17d88a339ab505 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 17:55:08 +0000 Subject: [PATCH 13/19] chore: upload cypress video's as artifacts in debug mode of github actions --- .github/workflows/tests.yml | 6 ++++++ cypress.config.js | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ec74ab0..9170140 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -64,6 +64,12 @@ jobs: name: cypress-screenshots path: cypress/screenshots if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn` + - uses: actions/upload-artifact@v4 + if: env.ACTIONS_RUNNER_DEBUG == 'true' + with: + name: cypress-videos + path: cypress/videos + if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn` - name: Upload coverage to Codecov uses: codecov/codecov-action@v2 with: diff --git a/cypress.config.js b/cypress.config.js index 06d91b6..120ad07 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -5,7 +5,7 @@ module.exports = defineConfig({ e2e: { baseUrl: 'http://localhost:1337', specPattern: '**/*.cy.{js,ts,jsx,tsx}', - video: false, + video: process.env.ACTIONS_RUNNER_DEBUG, defaultCommandTimeout: 20000, requestTimeout: 20000, setupNodeEvents(on, config) { From f0d9ab32bb3331b3174ac3cd86fdd65d42f6182d Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 18:32:06 +0000 Subject: [PATCH 14/19] fix: upload video artifacts on runner failure --- .github/workflows/tests.yml | 2 +- cypress.config.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9170140..47c6f37 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -65,7 +65,7 @@ jobs: path: cypress/screenshots if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn` - uses: actions/upload-artifact@v4 - if: env.ACTIONS_RUNNER_DEBUG == 'true' + if: failure() with: name: cypress-videos path: cypress/videos diff --git a/cypress.config.js b/cypress.config.js index 120ad07..15fc2ae 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -5,7 +5,7 @@ module.exports = defineConfig({ e2e: { baseUrl: 'http://localhost:1337', specPattern: '**/*.cy.{js,ts,jsx,tsx}', - video: process.env.ACTIONS_RUNNER_DEBUG, + video: true, defaultCommandTimeout: 20000, requestTimeout: 20000, setupNodeEvents(on, config) { From 83cf8ed165ff3ee1cd252ce508ad7f3383c7c92a Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 19:59:39 +0000 Subject: [PATCH 15/19] fix: up the cypress timeout time --- cypress.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress.config.js b/cypress.config.js index 15fc2ae..995b777 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -6,8 +6,8 @@ module.exports = defineConfig({ baseUrl: 'http://localhost:1337', specPattern: '**/*.cy.{js,ts,jsx,tsx}', video: true, - defaultCommandTimeout: 20000, - requestTimeout: 20000, + defaultCommandTimeout: 30000, + requestTimeout: 30000, setupNodeEvents(on, config) { // implement node event listeners here. // eslint-disable-next-line global-require From 4e81ebe622ecd273416778c8f6ed15f5f7973624 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 20:18:44 +0000 Subject: [PATCH 16/19] fix: cypress flakyness by reloading after logging in --- cypress/support/commands.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 627c81f..719cef3 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -64,6 +64,8 @@ Cypress.Commands.add('login', (path) => { cy.wait('@sessionCheck').its('response.statusCode').should('equal', 200); } }); + + cy.reload(); }); Cypress.Commands.add('navigateToInterface', (path) => { From 7a0d228f777b623a04c3d251eb4e8ffc25997d07 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 20:26:14 +0000 Subject: [PATCH 17/19] fix: only reload after login, not after register --- cypress/support/commands.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 719cef3..00faa58 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -53,6 +53,7 @@ Cypress.Commands.add('login', (path) => { cy.get('input[name="password"]').type('Abc12345678'); cy.get('button[type="submit"]').click(); cy.wait('@sessionCheck').its('response.statusCode').should('equal', 200); + cy.reload(); } // Register if ($body.text().includes('Credentials are only used to authenticate in Strapi')) { @@ -64,8 +65,6 @@ Cypress.Commands.add('login', (path) => { cy.wait('@sessionCheck').its('response.statusCode').should('equal', 200); } }); - - cy.reload(); }); Cypress.Commands.add('navigateToInterface', (path) => { From 54bec393bf1768e63bc29a74b8d3cd186ce097bc Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 20:54:54 +0000 Subject: [PATCH 18/19] fix: recursive loggin in upon failed login attempt --- cypress/support/commands.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 00faa58..ab552eb 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -53,7 +53,15 @@ Cypress.Commands.add('login', (path) => { cy.get('input[name="password"]').type('Abc12345678'); cy.get('button[type="submit"]').click(); cy.wait('@sessionCheck').its('response.statusCode').should('equal', 200); + + // Sometimes the page hangs after logging in. + // If this happens we reload the page and log in again. cy.reload(); + cy.get('body').then(($b) => { + if ($b.text().includes('Log in to your Strapi account')) { + cy.login(); + } + }); } // Register if ($body.text().includes('Credentials are only used to authenticate in Strapi')) { From b25fe0cefb41836731d279c0986dcf4d87a735f4 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 30 Dec 2024 21:47:02 +0000 Subject: [PATCH 19/19] feat: add a e2e test for partial import/export from the gui --- admin/src/index.cy.jsx | 64 +++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/admin/src/index.cy.jsx b/admin/src/index.cy.jsx index 57ac469..e157500 100644 --- a/admin/src/index.cy.jsx +++ b/admin/src/index.cy.jsx @@ -39,36 +39,36 @@ describe('Config Sync', () => { }); }); - // it('Partial import & export', () => { - // cy.login(); - // cy.navigateToInterface(); - // cy.initialExport(); - - // cy.makeConfigChanges(); - - // cy.navigateToInterface(); - - // cy.get('button[aria-label="Select all entries"]').click(); - - // cy.intercept({ - // method: 'POST', - // url: '/config-sync/import', - // }).as('importConfig'); - // cy.get('button[aria-label="Select plugin_upload_settings"]').click(); - // cy.get('button').contains('Import').click(); - // cy.get('button').contains('Yes, import').click(); - // cy.wait('@importConfig').its('response.statusCode').should('equal', 200); - // cy.contains('plugin_users-permissions_advanced'); - // cy.contains('plugin_users-permissions_email'); - - // cy.intercept({ - // method: 'POST', - // url: '/config-sync/export', - // }).as('exportConfig'); - // cy.get('button[aria-label="Select plugin_users-permissions_advanced"]').click(); - // cy.get('button').contains('Export').click(); - // cy.get('button').contains('Yes, export').click(); - // cy.wait('@exportConfig').its('response.statusCode').should('equal', 200); - // cy.contains('plugin_users-permissions_email'); - // }); + it('Partial import & export', () => { + cy.login(); + cy.navigateToInterface(); + cy.initialExport(); + + cy.makeConfigChanges(); + + cy.navigateToInterface(); + + cy.get('button[aria-label="Select all entries"]').click(); + + cy.intercept({ + method: 'POST', + url: '/config-sync/import', + }).as('importConfig'); + cy.get('button[aria-label="Select plugin_upload_settings"]').click(); + cy.get('button').contains('Import').click(); + cy.get('button').contains('Yes, import').click(); + cy.wait('@importConfig').its('response.statusCode').should('equal', 200); + cy.contains('plugin_users-permissions_advanced'); + cy.contains('plugin_users-permissions_email'); + + cy.intercept({ + method: 'POST', + url: '/config-sync/export', + }).as('exportConfig'); + cy.get('button[aria-label="Select plugin_users-permissions_advanced"]').click(); + cy.get('button').contains('Export').click(); + cy.get('button').contains('Yes, export').click(); + cy.wait('@exportConfig').its('response.statusCode').should('equal', 200); + cy.contains('plugin_users-permissions_email'); + }); });